如何在 XSLT 中排除字段?

发布于 2024-11-04 05:31:25 字数 255 浏览 1 评论 0原文

我正在从表中获取信息:

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

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

I'm taking information from a table:

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

And I want to make sure I don't include a field from that table. Is that possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

听闻余生 2024-11-11 05:31:25

推式:

<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"/>

Push style:

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

Pull style:

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

<xsl:template match="table1/unwanted-element"/>
小鸟爱天空丶 2024-11-11 05:31:25

此转换

<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>

解释:使用和覆盖身份规则/template是最基本的XSLT设计模式。在这里,我们使用匹配 c 的空主体模板覆盖身份规则,这确保了该元素被忽略(“删除”/不复制)。

This transformation:

<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>

when applied on this XML document (which you missed to provide):

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

produces the wanted result (element b not copied):

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

Explanation: Using and overriding the identity rule/template is the most fundamental XSLT design pattern. Here we override the identity rule with a empty-body-template matching c and this ensures this element is ignored ("deleted"/not-copied).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文