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:使用EXSLT根据子字符串获取元素名_Xslt_Exslt - Fatal编程技术网

XSLT1.0:使用EXSLT根据子字符串获取元素名

XSLT1.0:使用EXSLT根据子字符串获取元素名,xslt,exslt,Xslt,Exslt,我有以下XML,我只想得到以“MBH”开头的元素名: 我有以下XSLT: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="http://exslt.org/common" version="1.0"> <xsl:variable name="x" select="ext:node-

我有以下XML,我只想得到以“MBH”开头的元素名:


我有以下XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="http://exslt.org/common"
version="1.0">

<xsl:variable name="x" select="ext:node-set(substring(local-name(//record/child::*),1,3)='MBH')"/>

<xsl:variable name="mbh">
    <xsl:for-each select="$x">
            <item>
                <xsl:copy>
                    <xsl:value-of select="local-name(.)"/>
                </xsl:copy> 
            </item>
    </xsl:for-each>
</xsl:variable>

<xsl:template match="/">
    <xsl:apply-templates select="$mbh"/>
</xsl:template>
</xsl:stylesheet>

但我得到的只是一个错误“描述:无法将#RTREEFRAG转换为节点列表!” 我正在使用EXSLT,但我不明白为什么会出现这种错误

谢谢你的帮助, 彼得

我有以下XML,我只想得到以“MBH”开头的元素名:

你怎么了

<xsl:apply-templates select="//record/*[starts-with(name(), 'MBH')]" />

?

请注意:

  • 尽可能使用
    name()
    而不是
    local-name()
    。输入中没有名称空间,因此它们之间没有任何区别
  • 子轴::
    轴是默认轴<代码>子项::*相当于
    *
  • 如果你能做些什么,改变输入。通过
    拥有
    不是很聪明,除非
    实际上与
    完全不同(而不仅仅是“第三个
    ”)。
    在这种情况下,
    是明智的。如果它们完全不同,就不应该有相似的名称

据我所知,您所做的任何复杂事情都不是必需的。你是对的,有时候我只是想让托马拉克先生复杂化,谢谢你让我找到了正确的方向。我发现你的应用模板只为找到的元素返回“true”。我把它改成了,效果很好。@Peter很高兴我帮了忙,但我有一种直觉,你仍然在做错事。为什么要使用
node-set()
?你们想实现什么?不,不,现在看起来简单多了:
它只给我一个3Mbh的字符串。。。彼得:啊,我明白了。是的,看起来还不错。
<xsl:apply-templates select="//record/*[starts-with(name(), 'MBH')]" />