給出像下面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