/NodeName/position()과 같은 XPath는 부모 노드 인 노드의 위치를 알려줍니다.XElement의 position()을 얻는 방법은 무엇입니까?
요소의 위치를 얻을 수있는 XElement (Linq to XML) 객체에는 메소드가 없습니다. 거기 있니?
/NodeName/position()과 같은 XPath는 부모 노드 인 노드의 위치를 알려줍니다.XElement의 position()을 얻는 방법은 무엇입니까?
요소의 위치를 얻을 수있는 XElement (Linq to XML) 객체에는 메소드가 없습니다. 거기 있니?
사실 NodesBeforeSelf().이
질문 XElement를 개체에 대한했다 XText 유형도 모든 것을 얻을 수 있기 때문에 작동하지 않습니다 계산합니다. 그래서 나는 그것을 사용되어야
int position = obj.ElementsBeforeSelf().Count();
을의 방향에 대한 브라이언트에
감사합니다 생각.
static int Position(this XNode node) {
var position = 0;
foreach(var n in node.Parent.Nodes()) {
if(n == node) {
return position;
}
position++;
}
return -1;
}
이 작업을 수행하기 위해 NodesBeforeSelf 방법을 사용할 수 있습니다
XElement root = new XElement("root",
new XElement("one",
new XElement("oneA"),
new XElement("oneB")
),
new XElement("two"),
new XElement("three")
);
foreach (XElement x in root.Elements())
{
Console.WriteLine(x.Name);
Console.WriteLine(x.NodesBeforeSelf().Count());
}
업데이트 : 당신이 정말로 단지 위치 방법을 원하는 경우에, 단지 확장 메서드를 추가합니다.
public static class ExMethods
{
public static int Position(this XNode node)
{
return node.NodesBeforeSelf().Count();
}
}
이제 x.Position()을 호출 할 수 있습니다. :)
실제로 XDocument의 Load 메서드에서 SetLineInfo의로드 옵션을 설정할 수 있습니다. 그런 다음 XElements를 IXMLLineInfo로 typecast하여 줄 번호를 가져올 수 있습니다.
당신은
var list = from xe in xmldoc.Descendants("SomeElem")
let info = (IXmlLineInfo)xe
select new
{
LineNum = info.LineNumber,
Element = xe
}
하지만 여전히 노드의 부모에 대한 입장을 제공하지는 않습니다. 줄 번호가 아닌가? – Vin
감사합니다 뭔가를 할 수 x.NodesBeforeSelf(). COUNT()는 단순히 훌륭한 작품. 그들은 XElement 클래스 위에 Position이라는 위치에 있었으면 좋겠다. – Vin
내 이전 댓글을 덮어 씁니다. 내 대답을 확인하십시오. – Vin