XSLT: xsl:sort 生成不需要的换行符



任务似乎很简单:按属性"id"的值对输入文档中的所有元素进行排序(本地);否则内容应保持不变。

输入 XML

<?xml version="1.0" encoding="utf-8"?>
<A>
  <Group>
    <Item id="c"/>
    <Item id="a"/>
    <Item id="b"/>
  </Group>
  <Group>
    <Item id="f"/>
    <Item id="d"/>
  </Group>
</A>

期望的输出

<?xml version="1.0" encoding="utf-8"?>
<A>
  <Group>
    <Item id="a"/>
    <Item id="b"/>
    <Item id="c"/>
  </Group>
  <Group>
    <Item id="d"/>
    <Item id="f"/>
  </Group>
</A>

请注意,排序是每个组项目的本地排序。这应该使这非常简单:

XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" encoding="utf-8" indent="yes" />
    <!-- Modified identity -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()">
                <xsl:sort select="@id" />
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:transform>

实际输出

<?xml version="1.0" encoding="utf-8"?>
<A>
    <Group>

        <Item id="a"/>
        <Item id="b"/>
        <Item id="c"/>
    </Group>
    <Group>

        <Item id="d"/>
        <Item id="f"/>
    </Group>
</A>

问题是不需要的换行符。我用撒克逊6.5.5,撒克逊-PE 9.4.0.4,撒克逊-HE 9.4.0.4,撒克逊-EE 9.4.0.4获得此结果。Xalan 引入了相同的换行符以及额外的格式污垢。

我一直盯着自己看,所以如果有任何建议,我将不胜感激。

使用 <xsl:strip-space elements="*"/> 作为顶级元素。在这种情况下,*是表示所有元素的通配符。相反,您可以列出要去除其空格的特定元素。

斯特利表

<?xml version="1.0" encoding="utf-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" encoding="utf-8" indent="yes" />
    <xsl:strip-space elements="*"/>
    <!-- Modified identity -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()">
                <xsl:sort select="@id" />
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:transform>

输出

<?xml version="1.0" encoding="utf-8"?>
<A>
   <Group>
      <Item id="a"/>
      <Item id="b"/>
      <Item id="c"/>
   </Group>
   <Group>
      <Item id="d"/>
      <Item id="f"/>
   </Group>
</A>

相关内容

  • 没有找到相关文章

最新更新