2008-10-02 3 views

답변

9

사실 NodesBeforeSelf().이

질문 XElement를 개체에 대한했다 XText 유형도 모든 것을 얻을 수 있기 때문에 작동하지 않습니다 계산합니다. 그래서 나는 그것을 사용되어야

int position = obj.ElementsBeforeSelf().Count(); 

을의 방향에 대한 브라이언트에

감사합니다 생각.

0
static int Position(this XNode node) { 
    var position = 0; 
    foreach(var n in node.Parent.Nodes()) { 
    if(n == node) { 
     return position; 
    } 
    position++; 
    } 
    return -1; 
} 
5

이 작업을 수행하기 위해 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()을 호출 할 수 있습니다. :)

+0

감사합니다 뭔가를 할 수 x.NodesBeforeSelf(). COUNT()는 단순히 훌륭한 작품. 그들은 XElement 클래스 위에 Position이라는 위치에 있었으면 좋겠다. – Vin

+0

내 이전 댓글을 덮어 씁니다. 내 대답을 확인하십시오. – Vin

0

실제로 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 
      } 
+0

하지만 여전히 노드의 부모에 대한 입장을 제공하지는 않습니다. 줄 번호가 아닌가? – Vin

관련 문제