gpt4 book ai didi

xml - 如何使用 XSLT 获取基于条件匹配的位置?

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

这是我的 XML:

<summary>
<test>
<name>test1</name>
<status>failure</status>
</test>
<test>
<name>test2</name>
<status>success</status>
</test>
<test>
<name>test3</name>
<status>success</status>
</test>
</summary>

如果 成功,我需要将 节点的 position() 存储在一个变量中,并从下一个模板中获取它。我只需要第一场比赛的 position() 。这可能吗?

最佳答案

我建议使用一个全局变量来保存想要的位置:

 <xsl:variable name="vFirstPassedPosition" select=
"count(/*/test
[status='success'][1]
/preceding-sibling::test) +1"/>

因为这个变量是全局变量(<xsl:stylesheet> 的子变量),它可以从任何模板引用,而不需要在模板内重新计算:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:variable name="vFirstPassedPosition" select=
"count(/*/test
[status='success'][1]
/preceding-sibling::test) +1"/>

<xsl:template match="/">
<xsl:value-of select="$vFirstPassedPosition"/>
</xsl:template>
</xsl:stylesheet>

当此示例转换应用于提供的 XML 文档时:

<summary>
<test>
<name>test1</name>
<status>failure</status>
</test>
<test>
<name>test2</name>
<status>success</status>
</test>
<test>
<name>test3</name>
<status>success</status>
</test>
</summary>

从任何模板(在本例中我们只有一个模板)中访问位置并正确输出:

2

如果 XML 文档的结构未知/不可预测,并且可以有任何级别的嵌套,包括嵌套 test元素,然后使用:

 <xsl:variable name="vFirstPassedPosition" select=
"count((//test[status='success'])[1]
/preceding::test)
+
count((//test[status='success'])[1]
/ancestor::test)

+1"/>

请注意:使用如下表达式来查找第一个 test 是错误的元素 status 的字符串值 child 是"success" :

//test[status='success'][1]       
  1. 在你的情况下 //根本不需要伪运算符,因为 XML 文档的结构是静态已知的,并且可以使用更高效的 XPath 表达式。

  2. //test[status='success'][1]一般情况下可以选择多个元素。它选择任何 test元素 status 的字符串值 child 是"success"哪个是其 parent 的第一个 child 。这是 XPath 中最常见的 FAQ 之一。 记住:XPath []运算符的优先级(优先级)高于 //伪运算符。如果您确实必须使用// (例如,事先不知道 XML 文档的确切结构),那么选择第一个这样的元素的正确 XPath 是:

:

(//test[status='success'])[1]

与许多其他编程语言(通常在数学中)一样,括号用于显式覆盖标准运算符的优先级。

关于xml - 如何使用 XSLT 获取基于条件匹配的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8063801/

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