xslt:在xsltproc中添加子元素会破坏格式

时间:2018-09-06 13:52:07

标签: xml xslt

考虑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>&#xA; </xsl:text>之类的手动注入空间来解决此问题,但是我敢肯定这不是办法。我认为我的XSLT有点愚蠢,但我不知道该怎么办。

1 个答案:

答案 0 :(得分:2)

除非存在混合的内容(带有文本节点的元素以及元素子元素,在示例输入中不是这种情况),我发现xsl:output indent="yes"<xsl:strip-space elements="*"/>的搭配效果最佳压痕。