2009-05-28 2 views
0

다음과 같이 XmlReader 및 xml 탐색기를 사용하고 있습니다.C#을 사용하여 XML 문서의 속성 계산 방법 계산

XmlDocument doc = new XmlDocument(); 
doc.Load(txtFileName.Text.Trim()); 
// Create the navigator. 

XPathNavigator xnav = doc.CreateNavigator(); 

탐색을 만들었 으면 자손을 선택할 수 있으며 자식 수를 결정할 수 있습니다. 그러나, 나는 문제가 있는데 그 노드의 속성 수를 알아야 할 때가 있습니다. 예를 들어, 다음 코드를 사용하는 하위 노드의 수를 알고 싶을 수는 없습니다.

int size = xnav.SelectDescendants(XPathNodeType.All, true).Count; 

이 함수는이 경우에 두 개의 매개 변수를 받아들입니다. 텍스트 설명이나 요소와 같이 선택하려는 노드 유형과 현재 하위 트리의 루트를 원하면 두 번째 매개 변수가 true로 설정됩니다 하위 노드의 일부뿐만 아니라 선택 될 노드.

select[*]의 결과는 XPathIterator 객체입니다.

물론 주석이나 공백의 수를 원하지 않으므로 all 속성을 사용하여 모든 노드를 검색하지 않고 원하는 노드의 유형을 지정해야 모든 것을 말할 수 있습니다 요소, 속성 및 텍스트 따라서 우리는 다음 명령을 실행해야합니다 :

int size = xnav.SelectDescendants(XPathNodeType.Attribute | XPathNodeType.Element | XPathNodeType.Text , true).Count; 

당신은 속성의 가치를 필요로한다고 생각합니다. 그래서 다음과 같은 노드의 유형을 지정하기 위해 노력하고 있습니다 :

int size = (xnav.SelectDescendants(XPathNodeType.Attribute, true).Count * 2) + 
    xnav.SelectDescendants(XPathNodeType.Element, true).Count + 
    xnav.SelectDescendants(XPathNodeType.Text , true).Count; 

현재 나는 그 모든 카운트를 제외하고 위의 모든 수를 가지고 있습니다.

HEEELLLPPP !!! 제발

p.s. 나는 요소에 루프를 통과하기를 원하지 않는다. 그렇게하는 것은 매우 비용이 많이 든다.

+0

당신이 예를 들어 XML 문서를 줄 수 있습니다 (이유)를 수신 할 것으로 예상되는 수와 현재 받고있는 횟수가 얼마나 많은 속성을 찾아 XPath를 사용할 수 있을까? 귀하의 질문은 현재 약간 혼란 스럽습니다. – steamer25

답변

0

나는 문자열에서 수동으로

<img src="" style="" width=""/> 

그냥 계산 그것을 할 것 "="직접이 작업을 수행 할 XmlReader를 사용해야합니다, 로그인 한 성능 정말 걱정이 있다면 그 그것을

+0

잘 모르겠습니다 ... Greg

+0

... 또는 var matches = (someVar==someOtherVar)

1

있어 이러한 XPath 쿼리를 모두 수행하지 않아야합니다. 또한 여러 문서 전반의 쿼리를 수행하는 대신 모든 카운트를 한 번에 추적 할 수있는 이점이 있습니다.

0

당신은

XmlDocument doc = new XmlDocument(); 
doc.Load(txtFileName.Text.Trim()); 
XPathNavigator xnav = doc.CreateNavigator(); 
xnav.Evaluate("count(//@*)");