从
转换xml的xslt select语句是什么<A>
<B id="x">
<C>
<D>
<D>
<D>
<D>
</C>
</B>
</A>
到
<C name = "x">
<D>
<D>
<D>
<D>
</C>
答案 0 :(得分:4)
这是一个简短而完整的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="B[@id]/C">
<C name="{../@id}">
<xsl:copy-of select="node()"/>
</C>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档(已更正为格式正确):
<A>
<B id="x">
<C>
<D/>
<D/>
<D/>
<D/>
</C>
</B>
</A>
产生了想要的正确结果:
<C name="x">
<D/>
<D/>
<D/>
<D/>
</C>
<强>解释强>:
正确使用模板模式匹配。
使用 AVT 。
答案 1 :(得分:0)
.
为C
:
<xsl:copy>
<xsl:attribute name="name">
<xsl:value-of select="../@id"/>
</xsl:attribute>
<xsl:copy-of select="*"/>
</xsl:copy>
答案 2 :(得分:0)
我会去
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<out>
<xsl:apply-templates/>
</out>
</xsl:template>
<xsl:template match="C">
<xsl:copy>
<xsl:attribute name="name"><xsl:value-of select="../@id"></xsl:value-of></xsl:attribute>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="A|B">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
哪个转换
<?xml version="1.0" encoding="UTF-8"?>
<A>
<B id="x">
<C>
<D/>
<D/>
<D/>
<D/>
</C>
</B>
</A>
到
<?xml version="1.0" encoding="UTF-8"?>
<out>
<C name="x">
<D/>
<D/>
<D/>
<D/>
</C>
</out>