2010-05-13 98 views
0

這裏是我的XML獲取當前節點的本地名

<FileRoot> 
    <UserSet1> 
     <User> 
      <FirstName></FirstName> 
      <LastName></LastName> 
     </User> 
     <User> 
      <FirstName></FirstName> 
      <LastName></LastName> 
     </User> 
     ... 
    </UserSet1> 
    <InactiveUsers> 
     <User> 
      <FirstName></FirstName> 
      <LastName></LastName> 
     </User> 
     <User> 
      <FirstName></FirstName> 
      <LastName></LastName> 
     </User> 
     ... 
    </InactiveUsers> 
</FileRoot> 

的結構。在我的XSL模板

<xsl:template match="/*/*"> 
    <File> 
     <xsl attribute name="Name"> 
      <xsl:value-of select="local-name(/*/*)"/> 
     </xsl:attribute> 
    </File> 
</xsl> 

轉化後,兩個UserSet1和InactiveUsers,給我「UserSet1 」。 UserSet1的預期結果應該是「UserSet1」,InactiveUsers的預期結果應該是「InactiveUsers」。我如何正確檢索值?

感謝

回答

2

/*/*是絕對路徑,所以local-name(/*/*)將總是相匹配的絕對路徑整個文檔中的第一個節點返回本地名稱。它看起來像你想要的當前節點的本地名稱。在這種情況下,請改用local-name()。如果未指定參數,則使用當前上下文節點。

此外,您還可以使用屬性值模板,而不是xsl:attribute,如下:

<xsl:template match="/*/*"> 
    <File Name="{local-name()}"/> 
</xsl> 
+0

正是我需要的。謝謝!! – fishiefishie 2010-05-13 22:11:46