将父节点添加到XML中的子节点中
问题描述:
我有一个非常简单的问题,但时间很短,所以如果任何人都可以提供快速答案,我将非常感激。基本上,我有一个XML如下:将父节点添加到XML中的子节点中
<Root>
<Delhi>
<Population>1000</Population>`enter code here`
</Delhi>
<Mumbai>
<Population>1000</Population>
<District>
<Name>Colaba</Name>
</District>
<District>
<Name>navi Mumbai</Name>
</District>
<District></District>
</Mumbai>
<Mumbai>
<Population>1000</Population>
</Mumbai>
<Mumbai>
<Population>1000</Population>
</Mumbai>
<Chennai>
<Population>1000</Population>
<District>
<Name>Chan</Name>
</District>
</Chennai>
<Kolkata>
<Population>1000</Population>
</Kolkata>
我想这个XML传递给方法,并希望响应类似下面:
<Root>
<Delhi>
<Population>1000</Population>
</Delhi>
<Mumbai>
<Mumbai>
<Population>1000</Population>
<District>
<District>
<Name>Colaba</Name>
</District>
<District>
<Name>navi Mumbai</Name>
</District>
<District></District>
</District>
</Mumbai>
<Mumbai>
<Population>1000</Population>
</Mumbai>
<Mumbai>
<Population>1000</Population>
</Mumbai>
</Mumbai>
<Chennai>
<Chennai>
<Population>1000</Population>
<District>
<District>
<Name>Chan</Name>
</District>
</District>
</Chennai>
</Chennai>
<Kolkata>
<Population>1000</Population>
</Kolkata>
所以逻辑非常简单:我想遍历根元素的节点,并检查我的节点是孟买,区或钦奈。如果是这样,我把这个名字的所有标签放在一个同名的标签内。 XML可以有任何级别,所以我相信它需要通过有效的递归来完成。
答
考虑一种XSLT解决方案,其中大多数通用语言为包括Perl,PHP,Python,VB,Java和C#(还包括其他语言)维护库。作为信息,XSLT是专门用于转换,样式,重新格式化或重新构造XML文档的声明式专用编程语言(与SQL类型相同,但带有数据库)。
请注意:这个XSLT脚本转换您的XML,但不处理只复制两个无关的孟买节点这似乎与您的文档不合适。
XSLT使用Muenchian Method将区域项目组合在一起。
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="MumbaiDistrict" match="Mumbai[1]" use="District" />
<xsl:key name="ChennaiDistrict" match="Chennai" use="District" />
<!-- Identity Transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Mumbai[1]">
<xsl:element name="Mumbai">
<xsl:element name="Mumbai">
<xsl:copy-of select="Population"/>
<xsl:element name="District">
<xsl:for-each select="key('MumbaiDistrict', District)">
<xsl:copy-of select="District"/>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="Chennai">
<xsl:element name="Chennai">
<xsl:element name="Chennai">
<xsl:copy-of select="Population"/>
<xsl:element name="District">
<xsl:for-each select="key('ChennaiDistrict', District)">
<xsl:copy-of select="District"/>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出
<?xml version="1.0"?>
<Root>
<Delhi><Population>1000</Population>`enter code here`
</Delhi>
<Mumbai>
<Mumbai>
<Population>1000</Population>
<District>
<District>
<Name>Colaba</Name>
</District>
<District>
<Name>navi Mumbai</Name>
</District>
<District/>
</District>
</Mumbai>
</Mumbai>
<Mumbai>
<Population>1000</Population>
</Mumbai>
<Mumbai>
<Population>1000</Population>
</Mumbai>
<Chennai>
<Chennai>
<Population>1000</Population>
<District>
<District>
<Name>Chan</Name>
</District>
</District>
</Chennai>
</Chennai>
<Kolkata>
<Population>1000</Population>
</Kolkata>
</Root>
你想这样做的什么语言? – AutomatedOrder
欢迎来到Stack Overflow。在不知道您使用的是哪种语言或XML API的情况下很难帮助您 - 而且您应该显示您已经尝试过的内容。另外,如果你可以展示一个简短的例子,这将有助于保持简单。 –
将其转换为本地数组。正确构建它,然后将其转换回xml。提示:您可以使用json编码和解码来转换数组和从数组。 –