2017-04-19 26 views
1

我有一个XML,我基本上只需要将一个元素复制到另一个元素上。XSLT - 用另一个覆盖一个元素

<sitecore> 
    <phrase path="/content/Bootcamper/Data/Forms/Contact" key="Contact" itemid="{1EDC7BBB-2194-4B0E-A031-F0383F60664D}" fieldid="Name" updated="20170410T131336Z"> 
    <de-CH>Absenden</de-CH> 
    <fr-CH>Submit</fr-CH> 
    <en>Submit</en> 
    </phrase> 
    <phrase path="/content/Bootcamper/Data/Forms/Contact/unknown section/Vorname" key="Vorname" itemid="{9D561751-5B89-4B90-A93F-383A591202DE}" fieldid="Title" updated="20170410T123903Z"> 
    <de-CH>Vorname</de-CH> 
    <en>Firstname</en> 
    </phrase> 
</sitecore> 

我需要的是一个类似XML,但是从<de-CH><fr-CH>内容。并且总是删除<en>。如果<fr-CH>不存在,则应该创建它。

<sitecore> 
    <phrase path="/content/Bootcamper/Data/Forms/Contact" key="Contact" itemid="{1EDC7BBB-2194-4B0E-A031-F0383F60664D}" fieldid="Name" updated="20170410T131336Z"> 
    <de-CH>Absenden</de-CH> 
    <fr-CH>Absenden</fr-CH> 
    </phrase> 
    <phrase path="/content/Bootcamper/Data/Forms/Contact/unknown section/Vorname" key="Vorname" itemid="{9D561751-5B89-4B90-A93F-383A591202DE}" fieldid="Title" updated="20170410T123903Z"> 
    <de-CH>Vorname</de-CH> 
    <fr-CH>Vorname</fr-CH> 
    </phrase> 
</sitecore> 

我设法复制<de-CH>并删除<en>标签。但是现在我必须将<de-CH>复制到新的(或现有的)<fr-CH>中。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" encoding="utf-8" indent="no"/> 
    <xsl:template match="node() | @*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node() | @*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="en|fr-CH"/> <!-- this empty template will remove them -->     
</xsl:stylesheet> 
+0

总会有''标签出现吗? –

+0

是的,总会有一个''标签。 – Remy

回答

1

如果总是将是de-CH节点存在,做一个方式,它是有一个模板匹配de-CH该副本,但也增加了fr-CH节点太

试试这个XSLT

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

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

    <xsl:template match="en|fr-CH"/> 

    <xsl:template match="de-CH"> 
    <xsl:copy-of select="." /> 
    <fr-CH> 
     <xsl:value-of select="." /> 
    </fr-CH> 
    </xsl:template> 
</xsl:stylesheet> 
+0

工程就像一个魅力。谢谢! – Remy