2013-10-23 56 views
1

我有xml文件:XSLT - 如何選擇XML屬性

<root> 
<host> 
<address addr="192.168.0.1" addrtype="ipv4"/> 
<ports> 
<port protocol="tcp" portid="10"></port> 
<port protocol="tcp" portid="20"></port> 
</ports> 
</host> 
<host> 
<address addr="192.168.0.2" addrtype="ipv4"/> 
<ports> 
<port protocol="tcp" portid="30"></port> 
<port protocol="tcp" portid="40"></port> 
</ports> 
</host> 
<root> 

我想要得到的結果是這樣的:

192.168.0.1 10,20 
192.168.0.2 30,40 

我使用的for-each(第一塔) :

<xsl:for-each select="root/host"> 
<xsl:value-of select="address/@addr"/></fo:block> 
</xsl:for-each> 

但是第二列是一個問題..我得到錯誤的結果:

192.168.0.1 10,20,30,40 
192.168.0.2 10,20,30,40 

請幫忙:)

回答

1

您需要重新遍歷所有子端口元素。下面應該工作:

<xsl:for-each select="root/host"> 
    <xsl:value-of select="address/@addr" /> 
    <xsl:text> </xsl:text> 
    <xsl:for-each select="ports/port"> 
     <xsl:value-of select="@portid" /> 
     <xsl:if test="following-sibling::*">,</xsl:if> 
     <xsl:text>&#xa;</xsl:text> 
    </xsl:for-each> 
</xsl:for-each>