如何在XSLT中排除字段?

时间:2011-04-28 15:12:26

标签: xml xslt

我正在从表格中获取信息:

<xsl:template match="table1">
  <xsl:element name="ApplicantAddress">
    <xsl:apply-templates select="@* | node()"/>
  </xsl:element>
</xsl:template>

我想确保我不包含该表中的字段。这可能吗?

2 个答案:

答案 0 :(得分:2)

推送风格:

<xsl:template match="table1">
   <ApplicantAddress>
     <xsl:apply-templates select="@* | node()[not(self::unwanted-element)]"/>
   </ApplicantAddress>
</xsl:template>

拉风格:

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

<xsl:template match="table1/unwanted-element"/>

答案 1 :(得分:0)

此转化

<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="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

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

 <xsl:template match="c"/>
</xsl:stylesheet>

应用于此XML文档(您错过了提供):

<table1>
 <a/>
 <b/>
 <c/>
 <d/>
</table1>

生成想要的结果(元素b未复制):

<ApplicantAddress>
  <a />
  <b />
  <d />
</ApplicantAddress>

解释:使用和覆盖identity rule /模板是最基本的XSLT设计模式。在这里,我们使用匹配c的空体模板覆盖标识规则,这可以确保忽略此元素(“已删除”/未复制)。