我有以下XML: -
<inventory>
<item>
<name_element>
<!--some structure-->
</name_element>
<some_element1>val1</some_element1>
<some_element2>val2</some_element2>
<!-- some more elements -->
</item>
<!-- lots of items -->
</inventory>
Run Code Online (Sandbox Code Playgroud)
现在我想将其转换为: -
<inventory>
<item some_element1="val1" some_element2="val2" ... >
<name_element>
<!-- as it is -->
</name_element>
</inventory>
Run Code Online (Sandbox Code Playgroud)
基本上我对some_elements的名称/类型一无所知,任何项目都可以包含任意数量的这些元素.我知道它们都是简单类型并且可以转换为属性.
我已经阅读过使用XSLT将XML元素转换为XML属性,它告诉我如何将所有子元素转换为属性,但是我不清楚如何排除特定的"name_element"转换为属性.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="item">
<xsl:copy>
<!--apply templates for any attributes and convert
elements(except for name_element) in order to create all
attributes before creating child nodes for item element -->
<xsl:apply-templates select="@*
| *[not(self::name_element)]"/>
<!--apply templates to name_element and any comments or processing instructions -->
<xsl:apply-templates select="name_element
| comment()
| processing-instruction()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="item/*[not(self::name_element)]">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4674 次 |
| 最近记录: |