如何从XLST中排除节点

时间:2020-09-29 13:55:05

标签: xslt

对不起,这是一个真正的新手问题。我真正的问题涉及将HTML转换为Open Office XML,但这说明了我所遇到的问题。我想确保在处理过程中忽略“ b”节点,即在结果输出的末尾不要得到123。
XML:

<?xml version="1.0"?><?xml-stylesheet type="text/xsl"?>
<a> 
<hello-world>
<greeter>An XSLT Programmer</greeter>
<greeting>Hello, World!</greeting>
</hello-world>
<b>123
</b>
</a>

XSLT:

<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="hello-world">
  <HTML><HEAD><TITLE></TITLE></HEAD><BODY><H1>
    <xsl:value-of select="greeting"/>
        </H1>
     <xsl:apply-templates select="greeter"/>
    </BODY></HTML>
</xsl:template>

<xsl:template match="greeter">
  <DIV>from <I><xsl:value-of select="."/></I></DIV>
</xsl:template>
</xsl:stylesheet>

结果:

<HTML>
   <HEAD>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <TITLE></TITLE>
   </HEAD>
   <BODY>
      <H1>Hello, World!</H1>
      <DIV>from <I>An XSLT Programmer</I></DIV>
   </BODY>
</HTML>
123

2 个答案:

答案 0 :(得分:0)

问题是我没有选择整个文档。如果我按如下方式更改xslt,则它可以正常工作


<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/*">
  <xsl:apply-templates select='hello-world'/>
</xsl:template>

<xsl:template match="hello-world">
  <HTML><HEAD><TITLE></TITLE></HEAD><BODY><H1>
    <xsl:value-of select="greeting"/>
        </H1>
     <xsl:apply-templates select="greeter"/>
    </BODY></HTML>
</xsl:template>

<xsl:template match="greeter">
<DIV>from <I><xsl:value-of select="."/></I></DIV>
</xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

我看到您添加了一个答案,但认为我可以添加更多信息。

您的第一次尝试很好,您只需添加另一个模板即可忽略“ b”节点。

<xsl:template match="b"/>

发生的事情是,默认情况下,XSLT内置模板规则包括一个模板,该模板可复制未与模板明确匹配的任何节点的文本。

参考:docstore.mik.ua/orelly/xml/xmlnut/ch08_07.htm

使用添加的模板查看转换的输出:https://xsltfiddle.liberty-development.net/aixRus

相关问题