gpt4 book ai didi

xml - XSLT:排除子节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:35:38 26 4
gpt4 key购买 nike

我们正在使用 XSLT 将 XML 转换为 HTML。在这一部分中,我们有一个元素列表,我们需要提取字符串数据(减去任何 XML 标记)以用于另一个位置。

当前的 XSL 很简单:

<xsl:variable name="label_Text" select=".//column_header_1"/>
...
<xsl:value-of select="$label_Text"/>


这在大多数情况下工作正常,但某些 column_header 元素包含某些应排除的子节点。以这个 XML 片段为例:

<column_header_1>
    Foo <textstyle_bold>Bar</textstyle_bold> <editor_note>note from an editor</editor_note>
</column_header_1>

当前的 XSL 返回“来自编辑器的 Foo Bar 注释”,但我们不希望在此位置包含 editor_note 节点。上述代码片段的预期结果是“Foo Bar”。


我觉得我应该可以使用类似的东西

<xsl:value-of select="$label_Text[not(editor_note)]"/>

但到目前为止我还没有能够让它发挥作用。

请注意,editor_note 元素不应该从整个文档中排除,它应该只从这个特定值中排除,这似乎排除了使用空模板来删除节点。

最佳答案

Bob Dalgleish 的答案的编辑/更正版本:

使用模态形式应用模板。

在列标题中,以“非编辑器注释”模式调用 xsl:apply-templates 以抑制此类注释。

<xsl:apply-templates select="." mode="non-editor-note"/>

在“non-editor-note”模式下只需要一个特定的规则:

  <xsl:template match="editor_note" mode="non-editor-note"/>

对于所有其他节点,默认模板规则完全符合您的要求:忽略标记并向下递归到文本节点,然后复制文本节点。

关于xml - XSLT:排除子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com