2013-06-21 3 views
0

가정하자 나는이 HTML 파일이 :이 코드 1234512345 :연결하여 두 개의 노드 집합

<html> 
    <table class="class1"> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
     </tr> 
    </table> 

    <table class="class2"> 
     <tr> 
      <td>a</td> 
      <td>b</td> 
      <td>c</td> 
      <td>d</td> 
      <td>e</td> 
     </tr> 
    </table> 

    <table class="class3"> 
     <tr> 
      <td>3</td> 
      <td>4</td> 
      <td>5</td> 
     </tr> 
     <tr> 
      <td>3</td> 
      <td>4</td> 
      <td>5</td> 
     </tr> 
    </table> 
</html> 

나는이 결과를 얻기 위해 XPath에이 파일을 조회하고 싶은

var xNavigator = xPathDoc.CreateNavigator(); 
var iterator = xNavigator.Select("//html/table[@class='class1']/tr/td|//html/table[@class='class3']/tr/td"); 
while (iterator.MoveNext()) 
    Console.Write(iterator.Current.InnerXml); 

하지만 결과는 다음과 같습니다. 1212345345

1234512345 대신 1212345345를 어떻게 얻을 수 있습니까?

감사합니다.

+0

내가 원하는 것을 알고 있다고 생각하지만이 예는 모호합니다. 테이블 셀이 고유 한 값을 가지도록 변경하십시오 (어쩌면 class1 테이블의 경우 1-4, class3 테이블의 경우 A-F). 그런 다음 원하는 것을 설명하십시오. –

+0

모든 세포는 자신의 데이터 (유형 : 날짜 또는 특정 값)가 있기 때문에 나는 그것을 좋아한다! 그 숫자는 순서대로 데이터를 가질 필요가 있음을 나타냅니다 : 테이블 calss1의 모든 셀 다음에 클래스 class2의 모든 셀이 몇번이고 반복됩니다. –

+0

'|'는 연결 연산자가 아니라 조합 연산자입니다. 집합에는 순서가 정의되어 있지 않기 때문에 XPath 1.0에는 노드 집합 연결 연산자가 없으므로 연결이 의미가 없습니다. 사용자 지정 순서를 추적하려면 XPath 2.0이 필요한 시퀀스가 ​​필요합니다. @MichaelGunter가 제안한대로 C# 환경의 기능을 사용하십시오. – LarsH

답변

1

는 "노드 세트"나는 당신이 XPath는 1.0을 사용한다고 가정 이야기하고 있기 때문에 - 당신이 정말 그렇게 말을해야한다. XPath 1.0의 노드 집합은 특정 순서가없는 노드 집합입니다. 그러나 XSLT는 항상 문서 순서로 노드 집합의 노드를 처리하므로 XSLT에서 사용되는지 여부에 관계없이 모든 XPath 1.0 프로세서가 따르는 선례를 만들었습니다. 따라서 노드 집합을 반환하는 식은 문서 순서로 노드를 반환하기 때문에 관찰하는 효과가 있습니다.

XPath 2.0에는 사용자가 원하는 순서대로 노드를 반환 할 수있는 시퀀스가 ​​도입되었습니다.

1

두 개의 Select을 수행해야한다고 생각합니다. 아래 설명에서 설명했듯이 XPath 1.0 (.NET에서 지원하는 유일한 버전)은 노드 순서를 정의하지 않으며 구현은 모두 문서 순서로 노드를 반환합니다.

Returning XPath correct order (insted of document order)

+0

가능한 경우 하나만 선택하십시오. 질문은 C# 코드가 아니라 XPath에 관한 것입니다! :) –

+1

@AladdinGallas : 질문에 대한 답은 XPath가 단일 선택에서 사용자가 묻는 것에 대해 불가능하다는 것입니다. – LarsH

+0

@LarsH : 고마워요! –

관련 문제