XSLT 2.0 sheet-uri 没有得到正确的数据
XSLT 2.0 sheet-uri not getting the correct data
我正在尝试从 XSLT 中定义的 XML 文件中提取数据:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="example.com">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="sheet-uri" select="'path/to/some.xml'"/>
<xsl:param name="sheet-doc" select="document($sheet-uri)"/>
<!-- Template here -->
...
<xsl:for-each select="IsValid/time">
<Debug>
<xsl:variable name="referenced-code" select="$sheet-doc//Sheet/SomeData[time = current()]/id"/>
<xsl:choose>
<xsl:when test="$referenced-code">
<xsl:value-of select="$referenced-code"/>
</xsl:when>
<xsl:otherwise>-1</xsl:otherwise>
</xsl:choose>
</Debug>
...
来源xml:
<Data xmlns="example.com">
<id>21</id>
<IsValid>
<time>125622</time>
<time>094522</time>
<time>123456</time>
</IsValid>
</Data>
XML (some.xml
) 看起来像这样:
<Sheet>
<SomeData>
<time>125622</time>
<id>1</id>
<SomeData>
<SomeData>
<time>094522</time>
<id>1</id>
<SomeData>
<SomeData>
<time>123456</time>
<id>0</id>
<SomeData>
</Sheet>
这总是以 -1
打印 <Debug>
结束。为什么它不能正常工作?这在使用 XSLT 1.0 时工作正常。我正在尝试升级到 2.0,以便可以使用更多功能。
任何帮助将不胜感激,提前致谢!
当您指定:
xpath-default-namespace="example.com"
这适用于所有 您的 XPath 表达式。由于 some.xml
文件不使用此命名空间,因此您的变量:
<xsl:variable name="referenced-code" select="$sheet-doc//Sheet/SomeData[time = current()]/id"/>
最后是空的。
如果一个 XML 文档在命名空间中有元素而另一个没有,那么你显然不能在任何地方使用 xpath-default-namespace
但需要使用 <xsl:variable name="referenced-code" xpath-default-namespace="" select="$sheet-doc//Sheet/SomeData[time = current()]/id"/>
.
我正在尝试从 XSLT 中定义的 XML 文件中提取数据:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="example.com">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="sheet-uri" select="'path/to/some.xml'"/>
<xsl:param name="sheet-doc" select="document($sheet-uri)"/>
<!-- Template here -->
...
<xsl:for-each select="IsValid/time">
<Debug>
<xsl:variable name="referenced-code" select="$sheet-doc//Sheet/SomeData[time = current()]/id"/>
<xsl:choose>
<xsl:when test="$referenced-code">
<xsl:value-of select="$referenced-code"/>
</xsl:when>
<xsl:otherwise>-1</xsl:otherwise>
</xsl:choose>
</Debug>
...
来源xml:
<Data xmlns="example.com">
<id>21</id>
<IsValid>
<time>125622</time>
<time>094522</time>
<time>123456</time>
</IsValid>
</Data>
XML (some.xml
) 看起来像这样:
<Sheet>
<SomeData>
<time>125622</time>
<id>1</id>
<SomeData>
<SomeData>
<time>094522</time>
<id>1</id>
<SomeData>
<SomeData>
<time>123456</time>
<id>0</id>
<SomeData>
</Sheet>
这总是以 -1
打印 <Debug>
结束。为什么它不能正常工作?这在使用 XSLT 1.0 时工作正常。我正在尝试升级到 2.0,以便可以使用更多功能。
任何帮助将不胜感激,提前致谢!
当您指定:
xpath-default-namespace="example.com"
这适用于所有 您的 XPath 表达式。由于 some.xml
文件不使用此命名空间,因此您的变量:
<xsl:variable name="referenced-code" select="$sheet-doc//Sheet/SomeData[time = current()]/id"/>
最后是空的。
如果一个 XML 文档在命名空间中有元素而另一个没有,那么你显然不能在任何地方使用 xpath-default-namespace
但需要使用 <xsl:variable name="referenced-code" xpath-default-namespace="" select="$sheet-doc//Sheet/SomeData[time = current()]/id"/>
.