1
Supose我有這樣的XML:XSLT如何獲取以下兄弟節點的屬性值?
<Items>
<Car name="12">Mercedes</Car>
<Bike name="23">Gt</Bike>
<House name="gt">123</House>
<Skate name="as">111</Skate>
<Plane name="bb">5522</Plane>
<tv name="sss">Sony</tv>
</Items>
及以下XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Items">
<table>
<xsl:for-each select="*[position() mod 2 != 0]">
<tr>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:value-of select="name(following-sibling::*)"/>
</td>
<td>
<xsl:value-of select="following-sibling::*"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
輸出即時得到的是:
<table>
<tr>
<td>Car</td>
<td>Mercedes</td>
<td>Bike</td>
<td>Gt</td>
</tr>
<tr>
<td>House</td>
<td>123</td>
<td>Skate</td>
<td>111</td>
</tr>
<tr>
<td>Plane</td>
<td>5522</td>
<td>tv</td>
<td>Sony</td>
</tr>
</table>
但我需要的是屬性@name
代替節點名稱...我該怎麼做? 我需要的是這樣的:
<table>
<tr>
<td>12</td>
<td>Mercedes</td>
<td>23</td>
<td>Gt</td>
</tr>
<tr>
<td>gt</td>
<td>123</td>
<td>as</td>
<td>111</td>
</tr>
<tr>
<td>bb</td>
<td>5522</td>
<td>ss</td>
<td>sony</td>
</tr>
</table>
我知道,在第一<td>
我可以用@name
,但我怎麼能得到屬性「名稱」中的其他<td>
以下同級節點的?
差不多。 'following-sibling :: */@ name'返回所有**後面的兄弟姐妹的@名稱。你的意思是'follow-sibling :: * [1]/@ name'。 – Tomalak
@Tomalak,我也這麼認爲,但Zirkonix的答案似乎有效。是否有任何理由爲什麼一個*有索引到這裏的兄弟姐妹? –
有人糾正我,如果我錯了,但如果你沒有指定任何索引,默認情況下采取'[1]'。所以索引的唯一理由是指定除[1]之外的任何其他索引。 –