使用 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>
我想使用 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>