How to merge two XML documents?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Hvid Hat

    How to merge two XML documents?

    How can I merge the following two XML documents:

    Persons.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
    <person>
    <name>Albert</name>
    <department_id> 1</department_id>
    </person>
    <person>
    <name>Barry</name>
    <department_id> 2</department_id>
    </person>
    <person>
    <name>Charlie </name>
    <department_id> 3</department_id>
    </person>
    </persons>

    Departments.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <departments>
    <department>
    <id>1</id>
    <name>Managemen t</name>
    </department>
    <department>
    <id>2</id>
    <name>Sales</name>
    </department>
    <department>
    <id>3</id>
    <name>Support </name>
    </department>
    </departments>

    To generate the following XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
    <person>
    <name>Albert</name>
    <department>Man agement</department>
    </person>
    <person>
    <name>Barry</name>
    <department>Sal es</department>
    </person>
    <person>
    <name>Charlie </name>
    <department>Sup port</department>
    </person>
    </persons>

  • Mukul Gandhi

    #2
    Re: How to merge two XML documents?

    Please try this stylesheet (by applying to, Persons.xml):

    <xsl:styleshe et xmlns:xsl="http ://www.w3.org/1999/XSL/
    Transform"
    version="1.0">

    <xsl:output method="xml" indent="yes" />

    <xsl:variable name="dep" select="documen t('Departments. xml')" />

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

    <xsl:template match="departme nt_id">
    <xsl:variable name="dep_id" select="." />
    <department>
    <xsl:value-of select="$dep/departments/department[id = $dep_id]/
    name" />
    </department>
    </xsl:template>

    </xsl:stylesheet>

    Comment

    Working...