考虑bla.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<rooty>
<person>
<age>42</age>
<name>bob</name>
</person>
<person>
<age>53</age>
<name>doggo</name>
</person>
</rooty>
然后转换moo.xslt
,向每个人添加一头母牛:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="no" indent="yes" encoding="UTF-8"/>
<!-- Identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="person">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="node()"/>
<cow>Bessy</cow>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
使用xsltproc moo.xslt bla.xml
运行它似乎错过了换行符(在cow
之后):
<?xml version="1.0" encoding="UTF-8"?>
<rooty>
<person>
<age>42</age>
<name>bob</name>
<cow>Bessy</cow></person>
<person>
<age>53</age>
<name>doggo</name>
<cow>Bessy</cow></person>
</rooty>
我设法通过使用<xsl:text>
 </xsl:text>
之类的手动注入空间来解决此问题,但是我敢肯定这不是办法。我认为我的XSLT有点愚蠢,但我不知道该怎么办。
答案 0 :(得分:2)
除非存在混合的内容(带有文本节点的元素以及元素子元素,在示例输入中不是这种情况),我发现xsl:output indent="yes"
与<xsl:strip-space elements="*"/>
的搭配效果最佳压痕。