0

我对 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>

我不知道我怎么能做到这一点。

谢谢你的帮助

4

1 回答 1

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>
于 2013-07-03T03:34:33.827 回答