XSLT1.0:使用EXSLT根据子字符串获取元素名
我有以下XML,我只想得到以“MBH”开头的元素名: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-
我有以下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()
轴是默认轴<代码>子项::*相当于子轴::
*
- 如果你能做些什么,改变输入。通过
拥有
不是很聪明,除非
实际上与
完全不同(而不仅仅是“第三个
”)。
在这种情况下,
是明智的。如果它们完全不同,就不应该有相似的名称
node-set()
?你们想实现什么?不,不,现在看起来简单多了:
它只给我一个3Mbh的字符串。。。彼得:啊,我明白了。是的,看起来还不错。
<xsl:apply-templates select="//record/*[starts-with(name(), 'MBH')]" />