我想在面板中的标签和面板元素中包含标签元素
这是我的意见:
<test>
<gui>
<c name="NAME">dock1</c>
<tab>
<c name="NAME">TAB1</c>
<panel>
<c name="NAME">TAB1_1</c>
</panel>
<panel>
<c name="NAME">TAB1_2</c>
</panel>
</tab>
</gui>
<gui>
<c name="NAME">dock2</c>
<tab>
<c name="NAME">TAB2</c>
<panel>
<c name="NAME">TAB2_1</c>
</panel>
</tab>
<tab>
<c name="NAME">TAB2</c>
<panel>
<c name="NAME">TAB2_1</c>
</panel>
</tab>
<tab>
<c name="NAME">TAB3</c>
<panel>
<c name="NAME">TAB3_1</c>
<c name="MODEL"/>
</panel>
</tab>
</gui>
</test>
期望的输出:
<?xml version="1.0" encoding="UTF-8"?>
<test>
<gui>
<c name="NAME">dock1</c>
<tabs>
<tab>
<c name="NAME">TAB1</c>
<panels>
<c name="NAME">TAB1</c>
<panel>
<c name="NAME">TAB1_1</c>
</panel>
<panel>
<c name="NAME">TAB1_2</c>
</panel>
</panels>
</tab>
</tabs>
</gui>
<gui>
<c name="NAME">dock2</c>
<tabs>
<tab>
<c name="NAME">TAB2</c>
<panels>
<c name="NAME">TAB2</c>
<panel>
<c name="NAME">TAB2_1</c>
</panel>
</panels>
</tab>
<tab>
<c name="NAME">TAB2</c>
<panels>
<c name="NAME">TAB2</c>
<panel>
<c name="NAME">TAB2_1</c>
</panel>
</panels>
</tab>
<tab>
<c name="NAME">TAB3</c>
<panels>
<c name="NAME">TAB3</c>
<panel>
<c name="NAME">TAB3_1</c>
<c name="MODEL"></c>
</panel>
</panels>
</tab>
</tabs>
</gui>
</test>
这是我的XSLT:
<?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" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/test/gui">
<xsl:copy>
<xsl:apply-templates select="c[@name='NAME']"/>
<xsl:element name="tabs">
<xsl:for-each select="tab">
<xsl:copy>
<xsl:apply-templates select="c[@name='NAME']"/>
<xsl:element name="panels">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:copy>
</xsl:for-each>
</xsl:element>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这有点奏效,但间距/换行有问题
她是我的输出:
<?xml version="1.0" encoding="UTF-8"?><test>
<gui><c name="NAME">dock1</c>
<tabs><tab><c name="NAME">TAB1</c>
<panels>
<c name="NAME">TAB1</c>
<panel>
<c name="NAME">TAB1_1</c>
</panel>
<panel>
<c name="NAME">TAB1_2</c>
</panel>
</panels>
</tab>
</tabs>
</gui>
<gui><c name="NAME">dock2</c>
<tabs><tab><c name="NAME">TAB2</c>
<panels>
<c name="NAME">TAB2</c>
<panel>
<c name="NAME">TAB2_1</c>
</panel>
</panels>
</tab>
<tab><c name="NAME">TAB2</c>
<panels>
<c name="NAME">TAB2</c>
<panel>
<c name="NAME">TAB2_1</c>
</panel>
</panels>
</tab>
<tab><c name="NAME">TAB3</c>
<panels>
<c name="NAME">TAB3</c>
<panel>
<c name="NAME">TAB3_1</c>
<c name="MODEL"/>
</panel>
</panels>
</tab>
</tabs>
</gui>
</test>
为什么我的输出是这样的,我该如何解决?
答案 0 :(得分:1)
添加<xsl:strip-space elements="*"/>
,您应该获得缩进:http://xsltfiddle.liberty-development.net/eiQZDbn
如果你需要使用Xalan,那么它有一个自定义属性<xsl:output method="xml" version="1.0" indent="yes"
xmlns:xalan="http://xml.apache.org/xslt" xalan:indent-amount="2"/>
你可以申请获得缩进:http://xsltransform.hikmatu.com/3Nqn5Yb