Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT输出应该已经处理的节点的文本_Xml_Xslt - Fatal编程技术网

Xml XSLT输出应该已经处理的节点的文本

Xml XSLT输出应该已经处理的节点的文本,xml,xslt,Xml,Xslt,我的XSLT文件有一个问题,它采用的XML文件格式大致如下: <model> <interface> <doc>text1</doc> <acc> <op name="name"> <in> <doc>text2</doc>

我的XSLT文件有一个问题,它采用的XML文件格式大致如下:

<model>
    <interface>
        <doc>text1</doc>
        <acc>
            <op name="name">
                <in>
                    <doc>text2</doc>
                    <parameter name="name" type="type">
                        <doc>text3</doc>
                    </parameter>
                </in>
                <out>
                    <doc>text4</doc>
                    <parameter name="name" type="type">
                        <doc>text5</doc>
                    </parameter>
                </out>
                <exception name="name">
                    <doc>text6</doc>
                    <parameter name="name" type="type">
                        <doc>text7</doc>
                    </parameter>
                    <parameter name="name" type="type">
                        <doc>text8</doc>
                    </parameter>
                </exception>
            </op>
        </acc>
        <conn>
            <op name="name">
                <in>
                    <doc>text9</doc>
                    <parameter name="name" type="type">
                        <doc>text10</doc>
                    </parameter>
                </in>
            </op>
        </conn>
        <!-- rest omitted !-->
    </interface>
</model>

为什么会发生这种情况?我知道这是由于默认模板造成的,但在我看来,我并没有在任何地方匹配这些标记。如果我这样做了,我在底部添加了最终模板,匹配
model/interface/acc/op/in/parameter/doc
,只是为了捕捉这样的匹配,但它没有任何帮助

我还尝试覆盖导致此行为的默认模板,例如:

<xsl:template match="text()" />


然而,这两者都没有区别。我在这里不知所措


另外,请随意评论我的XSLT风格。我只是在学习它,我很好奇我是否遵循惯用XSLT。

显然,您正在将模板应用于包含要输出的文本节点的节点,但您没有与之匹配的相应模板。在这种情况下,将启动-它们的操作是输出所有子体文本值

我还尝试覆盖导致错误的默认模板 这种行为,例如:

<xsl:template match="text()" />

如果这不起作用,那么很明显,这些模板是以不同的模式应用的。事实上

<xsl:template match="text()" mode="toc"/>


将抑制不需要的文本。

显然,您正在将模板应用于包含要输出的文本节点的节点,但没有与之匹配的相应模板。在这种情况下,将启动-它们的操作是输出所有子体文本值

我还尝试覆盖导致错误的默认模板 这种行为,例如:

<xsl:template match="text()" />

如果这不起作用,那么很明显,这些模板是以不同的模式应用的。事实上

<xsl:template match="text()" mode="toc"/>

将抑制不需要的文本。

您有
,但该模式的唯一模板是
toc

<xsl:template match="acc/op/in" mode="toc">
    <tr>
        <td><a href="#{../@name}"><xsl:value-of select="../@name"/>foo</a></td>
    </tr>
</xsl:template>

如果您只想处理该模式的
acc/op/in
元素以输出表行,那么不要处理其他元素,因此最简单的解决方法似乎是使用
您有
,但该模式的唯一模板是
toc

<xsl:template match="acc/op/in" mode="toc">
    <tr>
        <td><a href="#{../@name}"><xsl:value-of select="../@name"/>foo</a></td>
    </tr>
</xsl:template>


如果您只想处理该模式下的
acc/op/in
元素以输出表行,则不处理其他元素,因此最简单的修复方法似乎是使用

啊,是的,我明白了。但是,接受另一个答案,因为这似乎是一个更好的主意。只是澄清一下,想法是一样的:更有选择地应用你的模板。我只是解释了为什么你的想法不起作用。啊,是的,我明白了。但是,接受另一个答案,因为这似乎是一个更好的主意。只是澄清一下,想法是一样的:更有选择地应用你的模板。我只是解释了为什么你的想法不起作用。