还有另一种/更好的方法吗? 必须是这种结构,我无法更改。
<xml>
<animal house="1">
<home>Cat</home>
<home>Dog</home>
<outside>Dove</outside>
<outside>Parrot</outside>
</animal>
<animal house="2">
<home>Turtle</home>
<home>Snake</home>
<outside>Bee</outside>
<outside>Horse</outside>
</animal>
</xml>
现在我需要从所有房屋中获得家畜并加入价值观
这可行,但是我想知道是否还有其他方法可以使用xpath
http://xsltransform.net/3MEbY7g
<xsl:for-each select="./animal">
<xsl:variable name="temp" >
<xsl:copy-of select="./home"/>
</xsl:variable>
<xsl:value-of select="$temp"/>
</xsl:for-each>
答案 0 :(得分:0)
仅可以使用XPath-2.0或更高版本。因此,请尝试以下XPath-2.0表达式:
string-join(for $a in /xml/animal return $a/home/text(),' - ')
其输出为
Cat - Dog - Turtle - Snake
XPath表达式的最后一部分是定界符。
在XPath-1.0中,您无法实现此目的。您可以选择的唯一设置是
/xml/animal/home
选择所有“家中动物”。
答案 1 :(得分:0)
您的代码
<xsl:for-each select="./animal">
<xsl:variable name="temp" >
<xsl:copy-of select="./home"/>
</xsl:variable>
<xsl:value-of select="$temp"/>
</xsl:for-each>
(a)非常long,而(b)在XSLT 1.0下没有产生所需的输出。
在XSLT 1.0中,您可以使用来获取所需的输出
<xsl:for-each select="animal/home">
<xsl:value-of select="."/>
</xsl:for-each>
在XSLT 2.0中,您可以编写:
<xsl:value-of select="animal/home" separator=""/>
使用单个XPath 2.0表达式可以实现相同的结果:
string-join(/*/animal/home, "")
但是没有等效的XPath 1.0。