我有一个像这样的xml文件:
<car>Ferrari</car>
<color>red</color>
<speed>300</speed>
<car>Porsche</car>
<color>black</color>
<speed>310</speed>
Run Code Online (Sandbox Code Playgroud)
我需要以这种形式:
<car name="Ferrari">
<color>red</color>
<speed>300</speed>
</car>
<car name="Porsche">
<color>black</color>
<speed>310</speed>
</car>
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我正在努力,因为我想不出一种方法来创建我需要的结构,从原始xml文件中的平面标签lis.
我选择的语言是Python,但欢迎提出任何建议.
XSLT是将一个XML结构转换为另一个XML结构的完美工具.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- copy the root element and handle its <car> children -->
<xsl:template match="/root">
<xsl:copy>
<xsl:apply-templates select="car" />
<xsl:copy>
</xsl:template>
<!-- car elements become a container for their properties -->
<xsl:template match="car">
<car name="{normalize-space()}">
<!-- ** see 1) -->
<xsl:copy-of select="following-sibling::color[1]" />
<xsl:copy-of select="following-sibling::speed[1]" />
</car>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
1)对于这个工作,你的XML必须有一个<color>和<speed>每一个<car>.如果不能保证,或者数量和类型的属性通常是可变的,请用复制语句的通用形式替换这两行:
<!-- any following-sibling element that "belongs" to the same <car> -->
<xsl:copy-of select="following-sibling::*[
generate-id(preceding-sibling::car[1]) = generate-id(current())
]" />
Run Code Online (Sandbox Code Playgroud)
应用于您的XML(我暗示了一个名为的文档元素<root>),这将是结果
<root>
<car name="Ferrari">
<color>red</color>
<speed>300</speed>
</car>
<car name="Porsche">
<color>black</color>
<speed>310</speed>
</car>
</root>
Run Code Online (Sandbox Code Playgroud)
在Python中将XSLT应用于XML的示例代码应该很容易找到,所以我在这里省略.它只需要4到5行Python代码.
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |