XSLT:<xsl:strip-space>错误并省略XML输出中的一些元素

时间:2017-02-22 13:55:15

标签: xml xslt

非常感谢您立即回复。你发送的代码对我来说很好,但是当我们有下面这行时它会抛出一个错误。删除此行时,它可以正常工作 对于此行<xsl:strip-space elements="*" />,我收到以下错误

  

无法从已加载的输入文档中删除空白区域   将输入文档改为XmlReader

另外,我还有一个疑问:如果我们想要选择一些子节点而不是所有子节点,该怎么办。

例如:

<root type="object">
    <items type="array">
        <item type="object">
            <elem1></elem1>
            <elem2></elem2>
            <elem3></elem3>
            <elem4></elem4>
            <elem5></elem5>
            <elem6></elem6>
            <elem7></elem7>
        </item>
    </items>
</root>

应该转变为:

<assets>
    <item>
        <elem1></elem1>
        <elem3></elem3>
        <elem6></elem6>
        <elem7></elem7>
    </item>
</assets>

1 个答案:

答案 0 :(得分:0)

试试这个XSLT-1.0。它会使用elemX复制所有需要的X€[1,3,6,7]元素,并删除所有其他elemY元素 所有空格均由<xsl:strip-space>删除。

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" /> 

    <xsl:template match="/">
      <assets>
        <item>
          <xsl:apply-templates select="@*|node()" />
        </item>
      </assets>
    </xsl:template>

    <xsl:template match="elem1|elem3|elem6|elem7" priority="1">
      <xsl:copy-of select="." />
    </xsl:template>

    <xsl:template match="*[starts-with(local-name(.),'elem')]" />

</xsl:stylesheet>

输出结果为:

<?xml version="1.0"?>
<assets>
    <item>
        <elem1/>
        <elem3/>
        <elem6/>
        <elem7/>
    </item>
</assets>