在您的特定情况下,XML文档不在默认命名空间中,因此XPath表达式如下:
/stock/item/name
未选择任何节点。
用途:
*[name()='name' and @xml:format = 'long']/text()
或者使用:
string(*[name()='name' and @xml:format = 'long'])
第一个表达式选择XML文档顶层元素的所有子元素中,名为name
(不考虑命名空间)的所有文本节点的元素。
第二个表达式生成XML文档顶层元素的第一个名为name
(不考虑命名空间)的子元素的字符串值。
基于XSLT的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:copy-of select="/*/*/*[name()='name' and @xml:format = 'long']/text()"/>
===========
<xsl:copy-of select="string(/*/*/*[name()='name' and @xml:format = 'long'])"/>
</xsl:template>
</xsl:stylesheet>
当应用此转换到提供的 XML 文档时:
<stock xmlns="http://localhost/aaabbb">
<item item-id="1">
<name xml:format="short">This is a short name</name>
<name xml:format="long">This is a LONG name</name>
</item>
</stock>
两个XPath表达式被评估,第一个选择的元素和第二个产生的字符串结果被复制到输出中:
This is a LONG name
===========
This is a LONG name