2013-09-23 22 views
0

我想属性转换为子元素,即把下面的变换属性的子元素:使用XSLT

<employees companyid="101"> 
    <record> 
     <id>1</id> 
     <name>pradeep</name> 
     <designation>softeng</designation> 
    </record> 
    <record> 
     <id>2</id> 
     <name>som</name> 
     <designation>softeng</designation> 
    </record> 
    <record> 
     <id>3</id> 
     <name>Javed</name> 
     <designation>softeng</designation> 
    </record> 
</employees> 

我想用这种方式

<employees> 
    <record> 

     <id>1</id> 
     <name>pradeep</name> 
     <designation>softeng</designation> 
    </record> 
    <record> 
     <id>2</id> 
     <name>som</name> 
     <designation>softeng</designation> 
    </record> 
    <record> 
     <id>3</id> 
     <name>Javed</name> 
     <designation>softeng</designation> 
    </record> 
</employees> 

它不工作转变。有什么建议么?

+5

所以我们要找出两者之间的区别是什么?如果我找到他们所有的东西都得到巧克力吗? – ppeterka

+1

请分享您的尝试。对于这个问题,两个适用收盘标准如下:“关于与你写必须说明具体问题的代码问题的问题 - 和包括有效的代码复制它 - 在这个问题本身见SSCCE.org指导。”和 “问题,要求代码必须证明正在解决这个问题的理解最少包括尝试的解决方案,为什么他们没有工作,和预期的结果也请参阅:堆栈溢出问题清单” – Marcin

+0

是您预期的输出是正确的,通过方式?还有就是你的输入样本中的“companyid”属性,但它不会出现在你的输出。正如你所提到的将属性转化为子元素一样,它表明某些事情已经走过了。谢谢! –

回答

0

我希望你需要在每个<record>水平<companyid>元素。您可以使用以下方法:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()" /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="record"> 
     <xsl:copy> 
      <companyid><xsl:value-of select="ancestor::employees/@companyid"/></companyid> 
      <xsl:apply-templates /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

如果你只是想让它出现在第一<record>元素上,你可以改变<xsl:template match="record"><xsl:template match="record[1]">

0
<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
     <employees> 
      <xsl:copy-of select="employees/*"/> 
     </employees> 
    </xsl:template> 
</xsl:stylesheet> 

假设你的输出是正确的,你只需要删除companyid属性。

+0

我们都猜他想要的东西,因为输出是不正确的diplayed,但他说:“只是想转换属性的子元素” –