使用XSLT忽略节点

时间:2017-10-09 14:25:33

标签: node.js xml xslt

我有以下xml文件,它来自我的供应商。

  <?xml version="1.0" encoding="UTF-8"?>
 <nm:MT_employee xmlns:nm="http://firstscenario.com"xmlns:tl="http://secondscenario.com">
   <EMployeeDetails>
  <Name>Janardhan</Name>
  <id>1234</id>
  <Address>India</Address>
   </EMployeeDetails>
<tl:Extension>
  <tl:Number>5678</tl:Number>
   <tl:Salary>2345678</tl:Salary>
   </tl:Extension>
   </nm:MT_employee>

在上面的xml中,我想忽略整个 tl:Extension 节点。最终输出应该如下

<?xml version="1.0" encoding="UTF-8"?>
 <nm:MT_employee xmlns:nm="http://firstscenario.com"xmlns:tl="http://secondscenario.com">
   <EMployeeDetails>
  <Name>Janardhan</Name>
  <id>1234</id>
  <Address>India</Address>
   </EMployeeDetails>
   </nm:MT_employee>

我尝试使用不同的XSLT代码,但它不起作用。您能否建议我如何实现这一目标?

此致 Janardhan

1 个答案:

答案 0 :(得分:0)

“忽略”源XML中的元素的一般规则 是为这个元素写一个“空”模板,在你的情况下:

<xsl:template match="tl:Extension"/>

由于此模板引用 tl 名称空间,因此必须指定它 在 xsl:transform 标记中。

当然,要复制其余的源内容,请复制您的脚本 必须包含身份模板

下面是一个示例脚本:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:tl="http://secondscenario.com" version="1.0">
  <xsl:output method="xml" indent="yes" />

  <xsl:template match="tl:Extension"/>

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