2013-05-30 2 views
-4

나는이 같은 XML 파일이 있습니다XPath를 "for"식으로 사용하는 방법?

   <record> 
        <AAA>aaa</AAA> 
        <BBB>bbb</BBB> 
        <CCC>ccc</CCC> 
       </record> 
       <record> 
        <AAA>ddd</AAA> 
        <BBB>eee</BBB> 
        <CCC>fff</CCC> 
       </record> 
       <record> 
        <AAA>ggg</AAA> 
        <BBB>hhh</BBB> 
        <CCC>iii</CCC> 
       </record> 

난 그 xml 파일의 모든 내용을 includs 하나의 문자열, 뭔가를 좀하고 싶습니다 : "AAA BBB CCC, DDD EEE FFF, GGG의 HHH III; "

XPath 표현식으로 어떻게 구현할 수 있습니까? 어쩌면 "대가로"?

도와주세요! 감사!

답변

3

경로 연산자 /이 동일하기 때문에 노드 시퀀스를 반복 할 때 거의 for을 사용할 필요가 없습니다.

그래서 당신은 사실, 반복과 연결이 XPath는 (2.0)에서 수행 할 수 있습니다

string-join(record/string-join(*, ' '), ';') 
+0

OP가 요청한 최종';'을 잊지 마십시오. – LarsH

0

제공하신 XML 형식이 올바르지 않습니다 (루트 요소가 없음). 레코드 요소는 root 요소 안에 있습니다. XPath 식에 따라

/root/record/* 

요소 AAA, BBB, CCC, AAA, BBB, CCC, AAA, BBB, CCC를 선택합니다. 그런 다음 결과를 반복하는 것은 사용자의 몫입니다. 분명히 사용하는 언어에 따라 다르므로 예제를 제공 할 수는 없습니다.

string-join((for $r in record return string-join($r/*, ' '), ''), ';') 

문자열의 시퀀스를 생성하는 것을위한 내부

대해 각이 AAA, BBB, CCC 자식 요소의 공간으로 구분 된 문자열 값되며, 상기 ''가에 빈 문자열을 추가하는 방법

+0

를 작성할 수 있습니다. – LarsH

1

end of tge sequence, 그리고 바깥 쪽 string-join은 시퀀스 항목을 세미콜론으로 결합합니다. 여분의 빈 문자열은 후미 세미콜론을 제공합니다.

+0

에 대해 컨텍스트 항목을 변경하지 않으면 $ r/* – BeniBela

+0

@ BeniBela 덕분에 작성해야합니다. 지금 수정했습니다. –

관련 문제