使用 xslt 选择特定子元素节点树进行输出

发布于 2024-10-25 16:32:14 字数 610 浏览 1 评论 0原文

我有一些带有额外元素的 XML,我希望它消失。输入 XML:

<top><middle><bottom><!-- other elements --><stuff/></bottom></middle></top>

所需输出:

<top><bottom><!--other elements --><stuff/></bottom></top>

(注意“中间”元素已从节点树中截取)

如何任意截取一个元素,而不必为源中每个可能的元素创建模板级联?有没有办法从给定点传递所有元素和子元素?包括XML标记、属性和内容?

我所做的搜索提到使用 但它不起作用 - "node()|@*" 仅返回内容和属性值,并且不是实际的子元素 XML 树。

如何在 XSLT 1 或 2 中执行此操作?我现在这样做的方法是为每个元素创建一个模板树,但“东西”?

I have some XML that has an extra element and I want it gone. Input XML:

<top><middle><bottom><!-- other elements --><stuff/></bottom></middle></top>

Output desired:

<top><bottom><!--other elements --><stuff/></bottom></top>

(note "middle" element has been snipped from the node tree)

How do I arbitrarily snip out an element without having to create a template cascade of every possible element in the source? Is there a way to just pass all elments and subelements from a given point? including the XML tagging, attributes and content?

Searches I've done mention using <xsl:copy> but it doesn't work - "node()|@*" only returns the content and attribute value and not the actual subelement XML tree.

How do I do this in XSLT 1 or 2? The way I am doing it now is to create a template tree for each element but the "stuff"?

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

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

发布评论

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

评论(1

勿忘初心 2024-11-01 16:32:14

使用身份转换并覆盖要删除的元素:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="middle">
      <xsl:apply-templates/>
  </xsl:template>
</xsl:stylesheet>

Use the Identity Transform with an override for the elements you want to remove:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="middle">
      <xsl:apply-templates/>
  </xsl:template>
</xsl:stylesheet>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文