如何将XML子节点属性转换为父节点同级元素?
我来帮你搞定这个XML转换的需求!要把<Child-id>节点的Name属性提取出来变成<Parent>下的同级元素,同时保留<Child-id>的文本内容并去掉原有的<Children>容器,用XSLT就能轻松实现。
解决方案:使用XSLT实现XML转换
先明确你的输入和预期输出示例:
输入XML
<Parent> <Children> <Child-id Name="John Doe">52bf9104-2c5e-4f1f-a66d-552ebcc53df7</Child-id> <Child-id Name="Some One">52bf9104-2c5e-4f1f-a66d-552ebcc53daa</Child-id> </Children> </Parent>
目标输出XML
<Parent> <child-id>52bf9104-2c5e-4f1f-a66d-552ebcc53df7</child-id> <Name>John Doe</Name> <child-id>52bf9104-2c5e-4f1f-a66d-552ebcc53daa</child-id> <Name>Some One</Name> </Parent>
接下来是实现这个转换的XSLT代码:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 匹配根节点下的<Parent>元素,开始处理逻辑 --> <xsl:template match="/Parent"> <Parent> <!-- 遍历<Children>下的每一个<Child-id>节点 --> <xsl:for-each select="Children/Child-id"> <!-- 创建小写的<child-id>元素,复制原节点的文本内容 --> <child-id> <xsl:value-of select="text()"/> </child-id> <!-- 创建<Name>元素,提取原节点的Name属性值 --> <Name> <xsl:value-of select="@Name"/> </Name> </xsl:for-each> </Parent> </xsl:template> </xsl:stylesheet>
代码逻辑说明:
<xsl:template match="/Parent">:定位到根节点下的<Parent>元素,作为转换的入口。<xsl:for-each select="Children/Child-id">:循环处理每一个<Children>容器内的<Child-id>节点。<child-id>:生成小写命名的新元素,通过<xsl:value-of select="text()"/>获取原<Child-id>节点里的UUID文本。<Name>:生成新的<Name>元素,通过<xsl:value-of select="@Name"/>提取原<Child-id>节点的Name属性值。
你可以用任何支持XSLT的工具(比如Saxon、Xalan,或者在线XML转换工具)运行这个样式表,输入原始XML就能得到预期的输出结果。
内容的提问来源于stack exchange,提问作者George Appiah Sarfo
相关产品推荐
相关产品推荐

