여러 태그를 선택하는 XPath
이렇게 단순화된 데이터 형식을 고려하면 다음과 같습니다.
<a>
<b>
<c>C1</c>
<d>D1</d>
<e>E1</e>
<f>don't select this one</f>
</b>
<b>
<c>C2</c>
<d>D2</d>
<e>E1</e>
<g>don't select me</g>
</b>
<c>not this one</c>
<d>nor this one</d>
<e>definitely not this one</e>
</a>
모든 것을 어떻게 선택하시겠습니까?C
s,D
모래를E
s의 자식인B
요소?
기본적으로 다음과 같은 것이 있습니다.
a/b/(c|d|e)
나 자신의 상황에서, 그냥.a/b/
, 그것들을 선택하기까지의 질의.C
,D
,E
노드는 사실 상당히 복잡하기 때문에 이 작업은 피하고 싶습니다.
a/b/c|a/b/d|a/b/e
가능한가요?
한 가지 정답은 다음과 같습니다.
/a/b/*[self::c or self::d or self::e]
참고할 점은
a/b/*[local-name()='c' or local-name()='d' or local-name()='e']
너무 길기도 하고 틀리기도 합니다.이 XPath 식은 다음과 같은 노드를 선택합니다.
OhMy:c
NotWanted:d
QuiteDifferent:e
대신 다음과 같은 속성 테스트를 통해 반복을 방지할 수 있습니다.
a/b/*[local-name()='c' or local-name()='d' or local-name()='e']
Dimtre의 적대적인 의견과 달리, OP가 네임스페이스와의 상호작용을 명시하지 않은 진공상태에서 위 내용이 틀린 것은 아닙니다.self::
axis는 네임스페이스 제한입니다.local-name()
아닙니다.OP의 의도가 캡처하는 것이라면c|d|e
네임스페이스에 관계없이(문제의 OR 특성을 고려할 때 심지어 가능성이 높은 시나리오라고 제안합니다), 이는 "아직도 긍정적인 표가 있는 또 다른 답변"이며, 이는 올바르지 않습니다.
당신은 정의 없이 확정적일 수 없지만, OP가 그의 질문을 제가 틀렸다는 것을 분명히 한다면 저는 정말로 제 대답이 틀렸다고 삭제할 수 있어서 매우 기쁩니다.
그거 좋지a/b/(c|d|e)
? 방금 색슨 XML 라이브러리(Clojure goodness로 잘 마무리됨)로 시도했는데 작동하는 것 같습니다.abc.xml
OP에 의해 기술된 문서입니다.
(require '[saxon :as xml])
(def abc-doc (xml/compile-xml (slurp "abc.xml")))
(xml/query "a/b/(c|d|e)" abc-doc)
=> (#<XdmNode <c>C1</c>>
#<XdmNode <d>D1</d>>
#<XdmNode <e>E1</e>>
#<XdmNode <c>C2</c>>
#<XdmNode <d>D2</d>>
#<XdmNode <e>E1</e>>)
이것이 도움이 될지는 모르겠지만 XSL을 사용하면 다음과 같은 작업을 수행할 수 있습니다.
<xsl:for-each select="a/b">
<xsl:value-of select="c"/>
<xsl:value-of select="d"/>
<xsl:value-of select="e"/>
</xsl:for-each>
그리고 이 XPath는 B 노드의 모든 자식을 선택하지 않습니까?
a/b/*
언급URL : https://stackoverflow.com/questions/721928/xpath-to-select-multiple-tags
'programing' 카테고리의 다른 글
content editable div에 htmlat carter 삽입 (0) | 2023.10.09 |
---|---|
체크박스를 기본으로 선택하는 방법은?인우커머스 체크아웃 (0) | 2023.10.09 |
jQuery에서 마지막 자식 요소를 선택하는 방법? (0) | 2023.10.09 |
Oracle : 다른 스키마에 테이블 생성을 허용하시겠습니까? (0) | 2023.10.09 |
PATH - Visual Studio Code 및 Node.js에서 런타임 '노드'를 찾을 수 없습니다. (0) | 2023.10.09 |