从 XPATH 中 Javascript 中的对象检索值
Retrieve value from object in Javascript in XPATH
我需要从 HTML 个文件中提取信息。对于其中的大多数,我只需要匹配特定 DOM 元素的内容或属性,因此我使用 XPATH 表达式,如 //a[@class="targeturl"]/@href
和命令行工具 xidel。
在另一批文件中,我想要的信息在 script
中,不是那么容易获得:
<html>
<head><!-- ... --></head>
<body>
...
<script>
...
var o = {
"numeric": 1234,
"target": "TARGET",
"urls": "http://example.com",
// Commented pair "strings": "...",
"arrays": [
{
"more": true
}
,
{
"itgoeson": true
}
]
};
</script>
...
</body>
</html>
请注意,包含我要获取的值的对象无效JSON。但是,它似乎每行尊重一个键值对。
我可以将什么传递给 xidel --xpath "???"
以获得此 TARGET
?
我已经尝试过使用 XPATH 函数的不同方法,但是如果不通过管道连接到其他命令我无法找到解决方案(match
告诉我 yes/no,replace
行行...等)。
尝试在 XPath 下实现:
substring-before(substring-after(//script, '"target": '), ",")
What can I pass to xidel --xpath "???"
to get this TARGET
?
由于var o
实际上是JSON,我建议您这样对待:
-e "json(
//script/extract(
.,
'var o = (.+);',
1,'s'
)[.]
)/target"
- 从
<script>
元素节点中提取 {"field1": 1234, "target": "TARGET", "morefields": "..."}
(json 包含几行,所以不要忘记 's'
正则表达式标志)。
- 通过将
json(
)
(或 //script/...[.] ! json(.)
)和 select target
属性包装起来,将输出解释为 json。
[编辑]
要删除评论(以 //
开头):
-e "json(
//script/replace(
extract(
.,
'var o = (.+);',
1,'s'
)[.],
'\s+//.+',
''
)
)/target"
不是最漂亮的查询,但它有效。
[/edit]
我需要从 HTML 个文件中提取信息。对于其中的大多数,我只需要匹配特定 DOM 元素的内容或属性,因此我使用 XPATH 表达式,如 //a[@class="targeturl"]/@href
和命令行工具 xidel。
在另一批文件中,我想要的信息在 script
中,不是那么容易获得:
<html>
<head><!-- ... --></head>
<body>
...
<script>
...
var o = {
"numeric": 1234,
"target": "TARGET",
"urls": "http://example.com",
// Commented pair "strings": "...",
"arrays": [
{
"more": true
}
,
{
"itgoeson": true
}
]
};
</script>
...
</body>
</html>
请注意,包含我要获取的值的对象无效JSON。但是,它似乎每行尊重一个键值对。
我可以将什么传递给 xidel --xpath "???"
以获得此 TARGET
?
我已经尝试过使用 XPATH 函数的不同方法,但是如果不通过管道连接到其他命令我无法找到解决方案(match
告诉我 yes/no,replace
行行...等)。
尝试在 XPath 下实现:
substring-before(substring-after(//script, '"target": '), ",")
What can I pass to
xidel --xpath "???"
to get thisTARGET
?
由于var o
实际上是JSON,我建议您这样对待:
-e "json(
//script/extract(
.,
'var o = (.+);',
1,'s'
)[.]
)/target"
- 从
<script>
元素节点中提取{"field1": 1234, "target": "TARGET", "morefields": "..."}
(json 包含几行,所以不要忘记's'
正则表达式标志)。 - 通过将
json(
)
(或//script/...[.] ! json(.)
)和 selecttarget
属性包装起来,将输出解释为 json。
[编辑]
要删除评论(以 //
开头):
-e "json(
//script/replace(
extract(
.,
'var o = (.+);',
1,'s'
)[.],
'\s+//.+',
''
)
)/target"
不是最漂亮的查询,但它有效。
[/edit]