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"/>.