我有一个带有默认命名空间的输入 xml。例如如下。
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="aaa">
<subroot>
<country>aaa</country>
<country>bbb</country>
<country>ccc</country>
</subroot>
</root>
转换时我使用 xpath-default-namespace="aaa" 因为否则 xpaths 将不匹配。同样,我必须使用 xsl 键功能读取查找 xml。例如如下
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xpath-default-namespace="aaa" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="LookupDoc" select="document('lookup.xml')" />
<xsl:key name="ObjectType-lookup" match="lookup" use="@att1" />
<xsl:template match="//country">
<countrynew>
<xsl:apply-templates select="$LookupDoc/*">
<xsl:with-param name="curr-code" select="string(.)" />
</xsl:apply-templates>
</countrynew>
</xsl:template>
<xsl:template match='lookups'>
<xsl:param name="curr-code" />
<xsl:value-of select="key( 'ObjectType-lookup' , normalize-space($curr-code))/@att2" />
</xsl:template>
在样式表元素 xpath "//country" 中使用默认命名空间可以正常工作。当我阅读没有任何命名空间的查找 xml 时出现问题。例如:
<?xml version="1.0" encoding="UTF-8"?>
<x:lookups>
<lookup att1="aaa" att2="zzz"/>
<lookup att1="bbb" att2="yyy"/>
<lookup att1="ccc" att2="xxx"/>
</x:lookups>
有什么方法可以在模板加工“查找”中指定以忽略 xpath-default-namespace 或匹配任何命名空间,包括没有命名空间?
谢谢