提问人:android.weasel 提问时间:5/7/2023 最后编辑:Gilles Quénotandroid.weasel 更新时间:5/7/2023 访问量:40
xpath 是否明确允许未定义的变量?
Does xpath explicitly allow undefined variables?
问:
我试图使用xmlstarlet从XML文件中提取一些数据,但是
xmlstarlet sel -t -v '//div[contains(@class,'addresses')]/a'
给我的比我预期的要多得多。
我终于弄清楚了 - 在替换 with 的帮助下调试 xpath - 这是因为周围的单引号消失了,因为整个参数都是单引号:替换为 按预期工作。-v
-c
'addresses'
"addresses"
我真正感到困惑的是它做了什么 - 因为 xmlstarlet 没有将其标记为错误或警告它,即使我认为它被视为未定义的变量。contains(@class,addresses)
我在 https://github.com/fishjam/xmlstarlet/blob/master/src/xml_select.c 中检查了源代码,但我找不到“警告”标志 - 应该有这样的东西,还是定义了 xpaths 以允许这样做?
答:
2赞
Martin Honnen
5/7/2023
#1
在 中,选择以上下文节点命名的(可能的)子元素(即在谓词所属的元素中);变量(引用)将写成 。contains(@class,addresses)
addresses
addresses
//div[contains(@class,addresses)]
div
[contains(@class,addresses)]
$addresses
评论
0赞
android.weasel
5/8/2023
感谢您的回复...但是我的 S 没有任何元素,那么为什么会选择任何 S?我有点困惑,这意味着“如果类属性包含单词”,但不引用它意味着什么......奇怪。div
<address>
div
contains(@class,"address")
address
0赞
Martin Honnen
5/8/2023
您的问题只是说您预计会出现未声明变量的错误或警告;没有迹象表明你选择了你没想到会被选中的东西;我认为这是一个边缘情况,其中 contains 的定义说对于空字符串作为第二个参数,结果是真的;和一个空的节点集(例如 has 作为第二个参数)转换为空字符串。contains(@class, addresses)
评论