2010-08-18 3 views
0

XML 문서에서 노드가 갖는 최대 속성 수를 찾는 데 관심이 있습니다. 내 코드는 C#을 사용하여 아래에 있습니다.노드가 XML 문서에 가지고있는 속성의 최대 수

 XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.Load(@"C:\ABC.xml"); 
     XmlNode root = xmlDoc.DocumentElement; 

     int nodeAttrCount = 0; 
     foreach (XmlNode node in root)        
      if (nodeAttrCount < node.Attributes.Count) 
       nodeAttrCount = node.Attributes.Count; 

관심이 있습니다 : 우리는 이보다 더 좋은 점이 있습니까? 동일한 결과 또는 anyother 옵션을 제공하는 메서드 또는 속성과 동일합니다.

+0

[.Max (n => n.Attributes.Count)와 함께 LINQ 사용에 대한 설명 삽입] [LINQ가 잔인하다는 회신 코멘트 삽입] –

답변

0

또한 XML에 LINQ를 사용할 수 있습니다. .NET 2.0의


:

XmlDocument doc = new XmlDocument(); 
doc.Load("MyXML.xml"); 
int max = 0; 
foreach (XmlNode xmlNode in doc.SelectNodes("//*")) 
    if (max < node.Attributes.Count) 
     max = node.Attributes.Count; 

이 기본적으로 솔루션과 동일하다; 의 주요 차이점은 모든 중첩 수준에서 모든 노드를 고려한다는 것입니다 (XPath 탐색 사용).

+0

코드를 사용해 주셔서 감사하지만 작동하지 않습니다. '>'오류가 잘못된 식으로 표시됩니다. "Max (x => x.Attributes (Count.)"를 인식하지 못합니다.) – Malik

+0

정말 이상합니다. 동일한 코드를 테스트했는데 잘 작동합니다 (.NET 3.5를 대상으로합니다). System.Linq; "클래스 헤더에? – digEmAll

+0

감사합니다.하지만 프로덕션 서버가 여전히 실행 중입니다 .Net 2.0 :( – Malik

0

이것은 상당히 틈새 요구 사항에 대한 3 줄의 코드입니다. 나는 이것이 .NET 프레임 워크에 이미 존재할 것이라고 기대하지 않는다.

foreach 루프가 정상적으로 보입니다. 문서 내부에서 반복되지 않고 루트 요소 만보고 싶습니까? 위의 코드는 모든 XML 노드를 통과

XElement el = XElement.Load("MyXML.xml"); 
int maxAttr = el.DescendantNodesAndSelf().OfType<XElement>().Max(x => x.Attributes().Count()); 

(너무 중첩 된 노드와 함께 작동)와 속성의 최대 수를 얻을 :

+0

문서 내에서 재귀를 할 필요가 없습니다. 사실 XML은 다음과 같습니다. <파일 attrib1 = ""attrib2 = ""attrib3 = ""attrib4 = ""... /> . . . . . 소리가 좋아? – Malik

+0

코드가 괜찮아 보입니다. 동일한 것을 썼습니다. –