gpt4 book ai didi

xml - XSLT - 检查序列的所有节点是否与一组值匹配

转载 作者:行者123 更新时间:2023-12-03 17:02:45 25 4
gpt4 key购买 nike

使用 XSLT v2.0,如何检查所有选定节点的文本是否与某些引用值匹配?

比如我全选H1节点。我想确保它们都等于“标题”或“标题”。

我一直在尝试为此创建一个函数:

<xsl:function name="is-valid" as="xs:boolean">
<xsl:param name="seq" as="item()*" />
<xsl:for-each select="$seq">
<xsl:if test="not(matches(current()/text(),'The title|A heading'))">
<!-- ??? -->
</xsl:if>
</xsl:for-each>
</xsl:function>

我不认为这是 XSLT 的方式,但我找不到如何做到这一点。

有什么提示吗?

最佳答案

只需使用这个简单的 XPath 表达式——the double negation law :

not(h1[not(. = ('The title','A heading'))])

作为演示,给出与@kjhughes 的答案相同的 XML 文档:
<r>
<h1>Wrong title</h1>
<h1>The title</h1>
<h1>A heading</h1>
</r>

这个 XSLT 2.0 转换:
<xsl:stylesheet version="20"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/*">
<xsl:sequence select="not(h1[not(. = ('The title','A heading'))])"/>
</xsl:template>
</xsl:stylesheet>

产生想要的正确结果:
false

这可以在 XPath 1.0 中用于确定节点集的所有字符串值是否 $ns1在另一个节点集的字符串值中 $ns2 :
not(not($ns1[. = $ns2]))

这是 XSLT 2.0/XPath 2.0 解决方案的 XPath 1,0/XSLT 1.0 等效项:
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:param name="pValues">
<v>The title</v>
<v>A heading</v>
</xsl:param>

<xsl:variable name="vValues" select="document('')/*/xsl:param[@name='pValues']/*"/>

<xsl:template match="/*">
<xsl:value-of select="not(h1[not(. = $vValues)])"/>
</xsl:template>
</xsl:stylesheet>

关于xml - XSLT - 检查序列的所有节点是否与一组值匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36695055/

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