给出像下面XSL节点集值
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<root>
<config>
<kids block="A">
<owner name="bob"/>
<owner name="alice"/>
</kids>
<kids block="B">
<owner name="Jimmy"/>
<owner name="Bimmy"/>
</kids>
<kids block="C">
<owner name="Johnny"/>
</kids>
</config>
<objects>
<object owner="bob">
<name>fish</name>
<value>200</value>
<part>head</part>
<part>tail</part>
</object>
<object owner="alice">
<name>cat</name>
<value>100</value>
<part>claws</part>
<part>head</part>
<part>tail</part>
</object>
<object owner="Jimmy">
<name>DoubleDragon</name>
<value>0</value>
<part>dragon</part>
</object>
</objects>
</root>
我希望得到以下
Output:
A - bob - fish
alice - cat
B - Jimmy - DoubleDragon
上市在每块的所有对象名称,然后每一个XML所有者基础。每个所有者只有一个对象,所以这不成问题。
是否可以在XSL 1.0中生成这样的输出?
我通过无效for-each
取得的成绩是遍历每个区块,然后通过其所有者,并搜索<objects>
部分中的每个所有者。但是,这不允许看中,分层输出,而不是我得到
A - bob - fish
A - alice - cat // note the duplicate A block name
B - Jimmy - DoubleDragon
我用
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="/root/config/kids/owner">
<xsl:variable name="ownername" select="./@name"/>
<xsl:text>
</xsl:text>
<xsl:variable name="ownedObject" select="/root/objects/object[@owner=$ownername]"/>
<xsl:if test="$ownedObject">
<xsl:value-of select="../@block"/> <xsl:text>-</xsl:text>
<xsl:value-of select="./@name"/> <xsl:text>-</xsl:text>
<xsl:value-of select="$ownedObject/name/text()"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
你可以显示你目前试过的XSLT吗?谢谢! –
@TimC我添加了有效的输入和当前的XSL(用于测试目的)。 – teodron