2010-05-13 76 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