使用XSLT删除节点后摆脱空行(Getting rid of empty lines after d

2019-07-29 12:04发布

我使用XSLT做一个XML文档中的一个非常简单的转换。 我只是想删除所有与特定名称的元素节点。 碰巧我的源文档中的所有这些节点都位于文档的末尾,但改造后,虽然节点已经消失,因为我打算,有很多在他们的地方空行。

这是严格意义上的化妆品的问题,因为我完成了我想要的东西与改造,但出于好奇:我怎样才能摆脱这些空行的? 这是我用于转换(我想删除名为“关系”的要素)的XSL文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" />

  <xsl:template match="*">
    <xsl:copy>
      <xsl:copy-of select="@*" />
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="relation"/>

</xsl:stylesheet>

Answer 1:

究其原因,是直接相邻的兄弟被删除的元素的白色空间,只有文本节点

解决方案 :只需添加这XSLT的指令,以消除任何空白,只有文本节点-改造开始之前就:

 <xsl:strip-space elements="*"/>

其结果可能会失去压痕 - 如果是这样,补充一点:

 <xsl:output omit-xml-declaration="yes" indent="yes"/>

彻底改造就变成了

<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="*">
        <xsl:copy>
            <xsl:copy-of select="@*" />
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="relation"/>
</xsl:stylesheet>

当应用这个XML文档 (没有提供!)

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>

  <relation/>
  <relation/>
  <relation/>
  <relation/>
  <relation/>
  <relation/>
  <relation/>
  <relation/>
</nums>

的想要的,正确的结果(无尾部空白)产生:

<nums>
   <num>01</num>
   <num>02</num>
   <num>03</num>
   <num>04</num>
   <num>05</num>
   <num>06</num>
   <num>07</num>
   <num>08</num>
   <num>09</num>
   <num>10</num>
</nums>


文章来源: Getting rid of empty lines after deleting nodes using XSLT
标签: xml xslt