【发布时间】:2015-11-28 11:34:00
【问题描述】:
我有一个文档,其中根元素定义了一个命名空间,当我编写一个 xsl 进行转换时,我没有看到任何匹配的元素。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//supplydetail/price"/>
</xsl:stylesheet>
XML 文件如下所示:
<?xml version="1.0" encoding="iso-8859-1"?>
<ONIXmessage xmlns="http://www.editeur.org/onix/2.1/short">
<header>
<m173>2012086</m173>
<m174>foobar</m174>
</header>
<product>
<supplydetail>
<j137>Foo Bar</j137>
<j396>20</j396>
<price>
<j148>42</j148>
<j151>5.99</j151>
<j152>AUD</j152>
<b251>AU</b251>
</price>
</supplydetail>
</product>
</ONIXmessage>
我看到的是我的supplydetail/price 元素根本不匹配,即使它存在于/ONIXmessage/product/supplydetail/price 的文档中
我尝试在 xsl 中指定从 root 开始的完整路径,但这也不起作用。我得到的输出是输入的直接副本,我期望的是输入的副本,除了价格元素。我认为原因是输入 XML 的 ONIXmessage 元素中的命名空间声明,但我如何在 xsl.xml 中指定它。
谢谢
【问题讨论】:
-
这个问题已经被问了几百次了,也有很多好的答案。要找到适合您需要的名称,请在 XSLT 的上下文中搜索 default namespace,例如stackoverflow.com/q/1344158/1987598.
-
Mathias,感谢您的回复,我的问题是我无法以返回您提到的链接的方式提出问题。
标签: xslt xpath xml-namespaces onix