2011-10-18 4 views
2

그래서 내가 같은 노드 구조가 있다고 가정 :이 내 XML 아니라고하고 싶은 모든XPath 1.0 : 여러 노드 결과에서 문자열 반환?

<Row> 
<Column Name="Primary Number">1</Column> 
<Column Name="Secondary Number">01</Column> 
<Column Name="Text">This is all one sentence</Column> 
<Row> 
<Column Name="Primary Number">1</Column> 
<Column Name="Secondary Number">02</Column> 
<Column Name="Text">I would like to return</Column> 
<Row> 
<Column Name="Primary Number">1</Column> 
<Column Name="Secondary Number">03</Column> 
<Column Name="Text">as one string, in one xpath line</Column> 

먼저,도 나는 그것을 구성하는 도움 않았다. 그러나 나는 그것을 필요로하는 정보를 검색하는 데 사용하도록 강요 받고 있습니다 .... 그래서 제발 도와주세요.

그래서 하나의 XPath를 사용하여 모든 기본 숫자 = 1 노드의 모든 n 개의 텍스트 필드에서 텍스트를 포함하는 문자열 하나를 반환하고 싶습니다.
XPath 1.0을 사용하면 가능합니까?

...

안녕 모두를 나는 그리 우아한 해결책을 가지고,하지만 난 차 번호의 정확한 수를 알고있는 경우에만 작동하고, 그것은 지저분한 CONCAT 단지 무리()의의 , 모두의 반응에 감사드립니다! 그래서이 문자열로 무엇을하고 싶었는지, 특정 키워드를 검색하기 위해 contains()를 사용 했었지만 실제로 모든 값을 연결 한 문자열을 가지고있는 바로 가기를 발견하고 누군가의 경우에이를 공유해야했습니다. 비슷한 문제가 있었다. Tod의 힌트가 이에 도움이되었습니다. BAM 마법과 조건을 추가했습니다. 은 여기있다 :

Table[@Name='TableName']/Row/Column[@Name='Text' and contains(text(),"keyword")][preceding-sibling::Column[@Name='Primary Number' and text()='15']] 
그래서이 무엇 대신에 다음 사용하여 하나 개의 문자열이 포함와 노드 값 결과()를 모두 연쇄이며, 별도로함으로써 제거 단어의 각 행을 검색 불가능에 대한 필요성. 모든 도움을 주신 분들께 감사 드리며, 모든 위대한 반응이 없었다면 그것을 할 수 없었습니다!
(I 모두 투표 업을주고 싶지만, 너무 새로운 해요 :()

이 보인다
+0

같은 질문 : http://stackoverflow.com/questions/1403971/xpath-to-return-string-concatenation-of-qualifying-child-node-values ​​ – kan

+0

@Kan 링크를 제공해 주셔서 감사합니다. 지저분한 concats를 사용하는 것에 붙어 .... – JWiley

답변

1

것은 여기에 작동합니다 :

//Row/Column[@Name="Text"][preceding-sibling::Column[@Name="Primary Number"]/text()="1"] 

반환 : 비록

This is all one sentence 
I would like to return 
as one string, in one xpath line 

, I

+0

토드 - 위대한 대답 주셔서 감사합니다, 그것은 내가 가진 순간보다 더 우아하고 몇 가지를 배웠습니다. 그러나 이것은 노드 목록을 반환하고 XPath 1.0에서는 첫 번째 노드 ("This is all one sentence")를 사용하는 문자열이 필요했습니다. 세 문자열 모두를 문자열로 반환 할 수 있었습니까? – JWiley

4

이 작업은 XPath 2.0에서 string-join() 함수로 수행되며, 012를 사용하여 XSLT 1.0에서 수행 할 수 있습니다.. 하지만 호스트 언어를 지원하지 않고 순수 XPath 1.0에서 수행 할 수 있다고 생각하지 않습니다.

+0

도움 주셔서 감사합니다. – JWiley