使用XSLT更改和合并XML中的元素

时间:2013-07-02 17:40:03

标签: xml xslt adobe-indesign

我对XSL很陌生,我试图改变和合并元素。我需要在InDesign中使用XML

在:

<?xml version="1.0" encoding="UTF-8" ?>
<catalog>
   <node>
      <Surname>Smith</Surname>
      <Name>Paul</Name>
      <Address1>New York</Address1>
      <Address2>Los Angeles</Address2>
   </node>
   <node>
      <Surname>White</Surname>
      <Name>John</Name>
      <Address1>San Francisco</Address1>
      <Address2>Miami</Address2>
   </node>
</catalog>

后:

<?xml version="1.0" encoding="UTF-8" ?>
<catalog>
   <node>
      <Name>Paul Smith</Name>
      <Address2>Los Angeles</Address2>
      <Address1>New York</Address1>
   </node>
   <node>
      <Name>John White</Name>
      <Address2>Miami</Address2>
      <Address1>San Francisco</Address1>
   </node>
</catalog>

我不知道如何实现这一目标。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这个XSLT应该做你需要的,尽管它没有重新排序地址。他们必须重新订购吗?

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
    <xsl:apply-templates />
</xsl:template>
<xsl:template match="node">
    <node>
        <xsl:apply-templates select="Name"/>
        <xsl:apply-templates select="Address2"/>
        <xsl:apply-templates select="Address1"/>
    </node>
</xsl:template>
<xsl:template match="Name">
    <Name>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
        <xsl:value-of select="../Surname"/>
    </Name>
</xsl:template>
<xsl:template match="Surname" />
<xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>