상위 노드 없이 모든 하위 노드(요소, 주석, 텍스트)를 가져오는 XPath
상위 요소가 없는 모든 하위 노드(텍스트 요소, 주석 요소 및 하위 요소 포함)를 가져오려면 XPath가 필요합니다.도움이 필요한
샘플 예제:
<DOC>
<PRESENTEDIN>
<X>
First Text Node #1
<y> Y can Have Child Nodes #
<child> deep to it </child>
</y>
Second Text Node #2 <z/>
</X>
<EVTS>
<evt/>
<evt>
<mtg_descr> SAE 2006 World Congress & Exhibition </mtg_descr>
<sess_descr> Advanced Hybrid Vehicle Powertrains (Part 1 of 5) </sess_descr>
<loc> Detroit,MI,United States </loc>
<sess_prod_grp_cd> TSESS </sess_prod_grp_cd>
<sess_evt_name> P13 </sess_evt_name>
<sess_gen_num> 138352 </sess_gen_num>
<mtg_start_dt> 04/03/2006 </mtg_start_dt>
<mtg_end_dt> 04/06/2006 </mtg_end_dt>
<desig> CONGRESS-2006 </desig>
</evt>
</EVTS>
<EVTTYPE>PAPER</EVTTYPE>
<SUPERTECH>
<![CDATA[C8585]]>
</SUPERTECH>
</PRESENTEDIN>
XPATH 시도됨
1. $doc/PRESENTEDIN/X
2. $doc/PRESENTEDIN/X/descendant::*
2. $doc/PRESENTEDIN/X/self::*
예상 출력
First Text Node #1
<y> Y can Have Child Nodes #
<child> deep to it </child>
</y>
Second Text Node #2 <z/>
나는 원하지 않아
<X>
First Text Node #1
<y> Y can Have Child Nodes #
<child> deep to it </child>
</y>
Second Text Node #2 <z/>
</X>
XPath(http://www.w3.org/TR/xpath/ #location- paths )의 설명서에서:
child::*
컨텍스트 노드의 모든 요소 자식을 선택합니다.
child::text()
컨텍스트 노드의 모든 텍스트 노드 자식을 선택합니다.
child::node()
노드 유형에 상관없이 컨텍스트 노드의 모든 자식을 선택합니다.
그래서 당신의 대답은 다음과 같습니다.
$doc/PRESENTEDIN/X/child::node()
모든 중첩 노드의 평면 배열을 원하는 경우:
$doc/PRESENTEDIN/X/descendant::node()
다음 XPath 식을 사용합니다.
/*/*/X/node()
이것은 임의의 노드(요소, 텍스트 노드, 주석 또는 처리 명령) 중 임의의 하위 노드를 선택합니다.X
XML 문서의 최상위 요소의 손자인 요소입니다.
선택한 노드를 정확하게 출력하는 XSLT 변환은 다음과 같습니다.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:copy-of select="/*/*/X/node()"/>
</xsl:template>
</xsl:stylesheet>
그리고 정확히 원하는 정확한 결과를 만들어냅니다.
First Text Node #1
<y> Y can Have Child Nodes #
<child> deep to it </child>
</y> Second Text Node #2
<z />
설명:
W3 XPath 1.0 스펙에 정의된 바와 같이,"
child::node()
노드 유형에 상관없이 컨텍스트 노드의 모든 자식을 선택합니다."이는 모든 요소, 텍스트 노드, 주석 노드 및 처리 명령 노드 자식이 이 노드 테스트에 의해 선택됨을 의미합니다.node()
는 의 약어입니다.child::node()
(왜냐하면)child::
는 기본 축이며 축이 명시적으로 지정되지 않은 경우에 사용됩니다.
언급URL : https://stackoverflow.com/questions/5119655/xpath-to-get-all-child-nodes-elements-comments-and-text-without-parent
'source' 카테고리의 다른 글
대용량 파일을 삽입할 때 "ORA-03135: 연결 끊김" (0) | 2023.10.19 |
---|---|
Spring JpaRepository - 엔티티 분리 및 부착 (0) | 2023.10.19 |
Xcode 6.1/Swift로 프로그래밍 방식으로 이미지를 UImageView로 설정 (0) | 2023.10.19 |
HTML에서 wrap text를 어떻게 말합니까? (0) | 2023.10.19 |
웹 로직/오라클에서 JDBC 풀의 기본 스키마 지정 (0) | 2023.10.19 |