我想在模板中指定一个匹配表达式,该表达式将在元素的多个名称空间上调用:
<xsl:template match="*[namespace-uri()='abc.com' or namespace-uri()='def.com']">
...
</xsl:template>
但这似乎不起作用。只有在左侧或表达式为真时才会调用它。
答案 0 :(得分:1)
使用命名空间的常用方法是声明它们,例如
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:abc="http://example.com/abc"
xmlns:def="http://example.com/def"
exclude-result-prefixes="abc def">
<xsl:template match="abc:* | def:*">...</xsl:template>
...
</xsl:stylesheet>
话虽如此,我认为你的or
谓语表达没有任何问题,除了你没有提供任何你用它的输入。
答案 1 :(得分:0)
<xsl:template match="*[namespace-uri()='abc.com' or namespace-uri()='def.com']">
...
</xsl:template>
But this does not seem to work.
此是正确的代码。
因此,问题在于您未向我们展示的代码。请提供一个简单的XML文档,以便每个人都可以将提供的XSLT代码应用于提供的XML文档并重现问题。
以下是“疑似”代码正确的示例:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[namespace-uri()='def.com' or namespace-uri()='abc.com']">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
在此XML文档上应用此转换时:
<a>
<b:b xmlns:b="abc.com">
<c/>
</b:b>
<f/>
<d:d xmlns:d="def.com">
<e/>
</d:d>
</a>
产生了想要的正确结果:
<b:b xmlns:b="abc.com">
<c/>
</b:b>
<d:d xmlns:d="def.com">
<e/>
</d:d>