例如,我得到的HTML字符串像這裏面的文字:使用XPath獲取父節點
<p><br><a href=\"http://www.hello.com/en/\">www.hello.com</a></p>
,我希望得到的結果是這樣的:
<br><a href=\"http://www.hello.com/en/\">www.hello.com</a>
但我終於在使用XPath語句時獲得「www.hello.com」
//p/text()
有什麼想法?
例如,我得到的HTML字符串像這裏面的文字:使用XPath獲取父節點
<p><br><a href=\"http://www.hello.com/en/\">www.hello.com</a></p>
,我希望得到的結果是這樣的:
<br><a href=\"http://www.hello.com/en/\">www.hello.com</a>
但我終於在使用XPath語句時獲得「www.hello.com」
//p/text()
有什麼想法?
使用此:
//p
它wiil選擇p
元素。
/p/*
將檢索所有元素爲p的子元素。這就是你想要的。
警告。您的元素<br>
結構不正確。你應該關閉它,因此它可以是一個很好形成空元素<br/>
/p/node() return the the same result "www.hello.com" – MaS
I don't know what XPath engine you are using. But if you do xmllint --xpath '/p/node()' file.xml - with file.xml containing your line - the ouptut is
www.hello.com。我在發佈前驗證它。 –
Spredzy
你如何運行XPath查詢? – Spredzy
But I finally get "www.hello.com" when using the the XPath statement
//p/text()
這將選擇任何文本節點是文檔中的p
元素的子元素。
但是,您不僅需要文本節點的子節點,還需要任何子節點,包括元素,如<br>
和<a>
。
解:
使用:
/p/node()
當這個XPath表達式與提供的XML評價(校正爲進行良好的XML文檔):
<p><br/><a href="http://www.hello.com/en/">www.hello.com</a></p>
選擇以下兩個節點:
<br/><a href="http://www.hello.com/en/">www.hello.com</a>
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="/p/node()"/>
</xsl:template>
</xsl:stylesheet>
當所提供的XML文檔施加:
<p><br/><a href="http://www.hello.com/en/">www.hello.com</a></p>
將選定節點複製到輸出:
<br/><a href="http://www.hello.com/en/">www.hello.com</a>
結果仍爲「www.hello。com「與」// p「,我希望結果字符串中的
和節點 – MaS
@MaS,這取決於您在XPath引擎中如何使用它 –
@MaS,'// p'將選擇任何p元素在文檔中 –