2011-02-17 5 views
116

를 선택XPath는 다음 XML 갖는 텍스트 노드

<node>Text1<subnode/>text2</node> 

어떻게 선택합니까를 중 첫 번째 또는 XPath를 통해 두 번째 텍스트 노드? 이 같은

뭔가 :이 노드 내부의 모든 텍스트의 병합 된 결과이기 때문에 물론

/node/text()[2] 

이 작동하지 않습니다.

+10

노드 안에있는 모든 텍스트가 병합 된 결과이므로 */node/text() [2] [...]가 작동하지 않습니다. * 틀린 점은'node' 루트 요소의 * 두 번째 텍스트 노드 자식을 의미합니다. ** 문자열 값 ** (자손 텍스트 노드의 연결)은'string (/ node)'이됩니다 –

+0

Xpath 쿼리가 작동해야합니까? 글쎄, 나는 다른 곳에 다른 문제가 있다고 생각한다. ;) 감사! – kernel

+0

좋은 질문입니다. +1. 설명 또는 상위 요소의 모든 텍스트 노드 노드를 선택하는 여러 XPath 표현식에 대한 내 대답을 참조하십시오. –

답변

141

다음과 같은 XML가 있습니까?

사용는 :

/node/text() 

이는 XML 문서 ("노드"라는 이름의) 상위 요소의 모든 텍스트 노드의 아이를 선택합니다.

/node/text()[1] 

이렇게하면 XML 문서의 맨 위 요소 ("노드")의 첫 번째 텍스트 노드 하위가 선택됩니다.

/node/text()[2] 

이렇게하면 XML 문서의 맨 위 요소 (노드)의 두 번째 텍스트 노드 하위가 선택됩니다.

/node/text()[someInteger] 

이렇게하면 XML 문서의 맨 위 요소 (node)의 someInteger 번째 텍스트 노드 하위를 선택합니다. 다음과 같은 XPath 표현식과 같습니다.

/node/text()[position() = someInteger] 
+1

'/ node [2]/text()'는 Chrome에서 잘 작동합니다. 39. –

+0

댓글을 주셔서 감사합니다. 무자비한 힘의 몇 시간을 구했다! –

+0

@ NaftuliTzviKay : 이것은 Chrome이 고장 났음을 의미합니다. 소스 XML 문서가 형식이 올바른 경우'/ node [2]'는 노드를 선택하지 않아야합니다. 잘 정의 된 XML 문서의 정의에 따르면 최상위 요소는 하나 (문서 요소)라고도합니다. –

22

xpath가 작동해야합니다. 나는 MarkLogic 및 Zorba Xquery/Xpath 구현에서 xpath 및 광산을 테스트했습니다.

둘 다 작동해야합니다.

<node>Text1<subnode/>text2</node> 

은 어떻게 선택합니까 중 첫 번째 또는 XPath를 통해 두 번째 텍스트 노드 :

/node/child::text()[1] - should return Text1 
/node/child::text()[2] - should return text2 


/node/text()[1] - should return Text1 
/node/text()[2] - should return text2