gpt4 book ai didi

xpath - XPath:第一个 child ,但仅在特定标签时

转载 作者:行者123 更新时间:2023-12-03 16:15:49 25 4
gpt4 key购买 nike

我需要一个XPath表达式来查找具有特定数目,类型和子顺序的节点。例如。我们需要一个具有三个子类型的expr,这些子类型分别为exprLEFT_ASSIGNexpr

//expr[count(child::*)=3]
[*[1][name()='expr']
[*[2][name()='LEFT_ASSIGN']
[*[3][name()='expr']


这可行,但是编写起来很麻烦,尤其是因为经常需要将相似的条件相互嵌入。例如。我需要指定上面的第一个 expr子代也具有一组特定的子代,依此类推:

//expr[count(child::*)=3]
[*[1][name()='expr'][count(child::*)=1][SYMBOL[count(child::*)=0]]]
[*[2][name()='LEFT_ASSIGN']]
[*[3][name()='expr']]


有没有更短,更简单的方法?

以下是一些示例数据:

<?xml version="1.0" encoding="UTF-8"standalone="yes" ?>
<exprlist>
<expr>
<expr>
<SYMBOL>X</SYMBOL>
</expr>
<LEFT_ASSIGN>&lt;-</LEFT_ASSIGN>
<expr>
<expr>
<NUM_CONST>42</NUM_CONST>
</expr>
<OP-STAR>*</OP-STAR>
<expr>
<NUM_CONST>42</NUM_CONST>
</expr>
</expr>
</expr>
<OP-SEMICOLON>;</OP-SEMICOLON>
<expr>
<expr>
<SYMBOL>Y</SYMBOL>
</expr>
<LEFT_ASSIGN>&lt;-</LEFT_ASSIGN>
<expr>
<NUM_CONST>42</NUM_CONST>
</expr>
</expr>
</exprlist>

最佳答案

XPath中写*[1][name()='expr']的惯用方式是*[1][self::expr]

//expr[count(child::*)=3]可以缩写为//expr[count(*)=3]

SYMBOL[count(child::*)=0]通常写为SYMBOL[not(*)]

关于xpath - XPath:第一个 child ,但仅在特定标签时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38352721/

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