Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
在XSLT1.0中,测试变量给定的节点是否为特定类型(例如文本)的正确方法是什么?_Xslt_Xslt 1.0 - Fatal编程技术网

在XSLT1.0中,测试变量给定的节点是否为特定类型(例如文本)的正确方法是什么?

在XSLT1.0中,测试变量给定的节点是否为特定类型(例如文本)的正确方法是什么?,xslt,xslt-1.0,Xslt,Xslt 1.0,我正在尝试编写一个XSLT1.0模板,它接受节点作为参数。在该模板中,我需要测试作为参数传递的节点是否属于特定类型,在我的例子中是文本节点。我可以通过self::text()和类似的构造来检查当前节点的类型,但是当有问题的节点由变量给定时,我该怎么做呢 这里有一段代码,它确实满足了我的需要,但我认为必须有一种更直接的方法来实现这一点。至少可以说,这个$node/./text()在我看来并不正确 <xsl:template name="renderCommand"> <x

我正在尝试编写一个XSLT1.0模板,它接受节点作为参数。在该模板中,我需要测试作为参数传递的节点是否属于特定类型,在我的例子中是文本节点。我可以通过
self::text()
和类似的构造来检查当前节点的类型,但是当有问题的节点由变量给定时,我该怎么做呢

这里有一段代码,它确实满足了我的需要,但我认为必须有一种更直接的方法来实现这一点。至少可以说,这个
$node/./text()
在我看来并不正确

<xsl:template name="renderCommand">
    <xsl:param name="node"/>

    <xsl:variable name="nodeName">
        <xsl:choose>
            <xsl:when test="$node/../text()">
                <xsl:value-of select="name($node)"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat('.', name($node))"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:variable>
</xsl:template>


如果您有一个表示节点的变量,并且希望检查它是否为文本节点,那么使用
when=“$node/self::text()”
就足够了。

根据您的口头描述,我只想说
when=“$node/self::text()”时
应该可以,但是看看你的代码,我想知道你希望得到什么作为文本节点的名称,当然你还没有显示你通过节点的所有代码。@MartinHonnen你是对的,
$node/self::text()
成功了,谢谢。事实上,获取文本节点的名称毫无意义。我在编这个例子的时候没有想到这一点;实际的代码有点不同。我已经将注释中的建议放入了答案中,以便您可以将问题标记为已解决。@MartinHonnen当然,再次感谢),但请注意,检查节点是否是属性更为棘手。@MichaelKay您指的是
count(.|../@*)=count(../@*)
技巧?顺便说一句,我不同意这是的重复,因为我的观点是将表示节点的变量转换为可以使用的变量。我当然读过这个问题及其答案,但它们只直接使用
self
。XPath是一种非常正交的语言,因此如果您有在上下文节点上工作的代码,将其转换为对变量起作用的代码并不重要。@MichaelKay这里的问题是,要用谷歌搜索这类东西,你需要正确地表达问题,如果你甚至不知道如何正确地调用事物,这是一项艰巨的任务。例如,
text()
-函数是什么?和
self::
-操作员?从这个意义上讲,XPath和XSLT是非常特殊的语言,我甚至想不出任何其他此类“转换”语言的例子。所有OO语言都有共同的概念,因此一旦您了解一种语言,就可以很容易地找到如何在另一种语言中执行相同的操作。但是对于XPath,唯一的选择是学习XPath。不同语言的知识对你没有帮助。