我们正在使用 XSLT 将 XML 转换为 HTML。在其中的一部分中,我们有一个元素列表,我们需要提取字符串数据,减去任何 XML 标记,以便在另一个位置使用。
当前的 XSL 很简单:
<xsl:variable name="label_Text" select=".//column_header_1"/>
...
<xsl:value-of select="$label_Text"/>
这在大多数情况下工作正常,但某些 column_header 元素包含应排除的某些子节点。以这个 XML 片段为例:
当前的 XSL 返回“来自编辑器的 Foo Bar note”,但我们不希望 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/