简体   繁体   中英

Transform XML file to another XML file using XSLT

I am trying to convert a xml file to another using XSLT. As I am a quite newbie to this please help me to create xslt to transform below input xml file to output xml file. Thanks in advance.

Input XML

<?xml version="1.0" encoding="UTF-8"?>
<title>
    <subtitle1>
        <OrganizationDetails>
            <OrgName>qwe</EmpNumber>
            <OrgAddress>asdfg 123</EmpName>
        </OrginzationDetails >
    </subtitle1>
    <subtitle2>
        <ResourceDetails>
            <EmpNumber>1</EmpNumber>
            <EmpName>xyz</EmpName>
        </ResourceDetails>
        <ResourceDetails>
            <EmpNumber>2</EmpNumber>
            <EmpName>abc</EmpName>
        </ResourceDetails>
        <ResourceDepartment>
            <EmpNumber>1</EmpNumber>
            <DepartmentNo>IT</DepartmentNo>
        </ResourceDepartment>
        <ResourceDepartment>
            <EmpNumber>2</EmpNumber>
            <DepartmentNo>SALES</DepartmentNo>
        </ResourceDepartment>
    </subtitle2>
</title>

Expected Output XML

<?xml version="1.0" encoding="UTF-8"?>
<title>
    <subtitle1>
        <OrginzationDetails>
            <OrgName>qwe</EmpNumber>
            <OrgAddress>asdfg 123</EmpName>
        </OrginzationDetails >
    </subtitle1>
    <subtitle2>
        <ResourceDetails>
            <EmpNumber>1</EmpNumber>
            <EmpName>xyz</EmpName>
        </ResourceDetails>

        <ResourceDepartment>
            <EmpNumber>1</EmpNumber>
            <DepartmentNo>IT</DepartmentNo>
        </ResourceDepartment>
    </subtitle2>
</title>

<title>
    <subtitle1>
        <OrginzationDetails>
            <OrgName>qwe</EmpNumber>
            <OrgAddress>asdfg 123</EmpName>
        </OrginzationDetails >
    </subtitle1>

    <subtitle2>
        <ResourceDetails>
            <EmpNumber>2</EmpNumber>
            <EmpName>abc</EmpName>
        </ResourceDetails>
        <ResourceDepartment>
            <EmpNumber>2</EmpNumber>
            <DepartmentNo>SALES</DepartmentNo>
        </ResourceDepartment>
    </subtitle2>
</title>

The essence of the solution is

<xsl:for-each-group select="/title/subtitle/*" group-by="EmpNumber">
  <title>
    <subtitle>
      <xsl:copy-of select="current-group()"/>
    ...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM