XPath에서 두 노드 사이의 HTML Nodes 가져오기
In XPath 1.0 one way to do this is by using the Kayessian method for node-set intersection:
$ns1[count(.|$ns2) = count($ns2)]
The above expression selects exactly the nodes that are part both of the node-set
$ns1
and the node-set $ns2
. To apply this to the specific question -- let's say we need to select all nodes between the 2nd and 3rd
h3
element in the following XML document: <html> <h3>Title T31</h3> <a31/> <b31/> <h3>Title T32</h3> <a32/> <b32/> <h3>Title T33</h3> <a33/> <b33/> <h3>Title T34</h3> <a34/> <b34/> <h3>Title T35</h3> </html>
We have to substitute
$ns1
with: /*/h3[2]/following-sibling::node()
and to substitute
$ns2
with: /*/h3[3]/preceding-sibling::node()
Thus, the complete XPath expression is:
/*/h3[2]/following-sibling::node() [count(.|/*/h3[3]/preceding-sibling::node()) = count(/*/h3[3]/preceding-sibling::node()) ]
We can verify that this is the correct XPath expression:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="/"> <xsl:copy-of select= "/*/h3[2]/following-sibling::node() [count(.|/*/h3[3]/preceding-sibling::node()) = count(/*/h3[3]/preceding-sibling::node()) ] "/> </xsl:template> </xsl:stylesheet>
When this transformation is applied on the XML document presented above, the wanted, correct result is produced:
<a32/> <b32/>
II. XPath 2.0 solution:
Use the
intersect
operator: /*/h3[2]/following-sibling::node() intersect /*/h3[3]/preceding-sibling::node()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.