使用 XSLT 展平 xml 层次结构

Flatten xml hierarchy using XSLT

我想使用 XSLT 将嵌套 xml 转换为展平 xml。

传入 xml 结构类似,但节点名称会因传入 xml 而改变,因此希望动态处理

样本输入

<?xml version="1.0" encoding="UTF-8"?>
<queryResponse>
  <Account>
    <Id>0010</Id>
    <Name>AA</Name>
    <RecordTypeId>0122/RecordTypeId>
    <RecordType>
      <Id>012</Id>
      <DeveloperName>Legal_Associate</DeveloperName>
    </RecordType>
  </Account>
  <Account>
    <Id>0011</Id>
    <Name>BB</Name>
    <RecordTypeId>0123</RecordTypeId>
    <RecordType>
      <Id>013</Id>
      <DeveloperName>Legal_Associate</DeveloperName>
    </RecordType>
  </Account>
 </queryResponse>

预期输出

<?xml version="1.0" encoding="UTF-8"?>
<queryResponse>
  <Account>
    <Id>0010</Id>
    <Name>AA</Name>
    <RecordTypeId>0122</RecordTypeId>
    <RecordType.Id>012</RecordType.Id>
  <RecordType.DeveloperName>Legal_Associate</RecordType.DeveloperName>
  </Account>
  <Account>
    <Id>0011</Id>
    <Name>BB</Name>
    <RecordTypeId>0123<RecordTypeId>
    <RecordType.Id>013</RecordType.Id>    <RecordType.DeveloperName>Legal_Associate</RecordType.DeveloperName>
    </Account>
    </queryResponse>

在 post 提出问题时,您应该 post 尝试过的代码,然后我们可以告诉您更新。

这是您可以得到答案的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" version="2.0">

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

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

    <xsl:template match="RecordType">
        <xsl:for-each select="*">
            <xsl:element name="{concat(name(..),'.',name())}">
                <xsl:apply-templates select="node()"/>
            </xsl:element>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>