XPath的主要目的是解决XML文档的各个部分。它还提供操纵弦乐,数字和布尔值的基本设施。 XPath使用紧凑的非XML语法。 XPath在XML文档的抽象逻辑结构上运行,而不是表面语法。
使用 XPath 3.1 生成一个包含一些“null”值的数组
我有一个映射,其键代表数组索引: 让 $m := map{1: 1, 2: 2, 5: 5, 7: 7} 返回 我想用它生成一个数组,用 null 填充空白: 大批 { ( 1 到最大($m =...
我有一个 HTML 表格,其中的 元素可以跨越多行: ... 我有一个 HTML 表格,其中包含可以跨越多行的 <td> 元素: <table border="1"> <tbody> <tr> <th>A</th> <th>B</th> <th>C</th> <th>D</th> </tr> <tr> <th>1</th> <td rowspan="2">B12</td> <td>C1</td> <td rowspan="3">D123</td> </tr> <tr> <th>2</th> <td rowspan="2">C23</td> </tr> <tr> <th>3</th> <td>B3</td> </tr> </tbody> </table> 我想从中生成表格格式: A B C D A1 B12 C1 D123 A2 B12 C23 D123 A3 B3 C23 D123 我正在尝试使用 XPath 3.1 来做到这一点(我并不反对 XQuery 或 XSLT 解决方案,但我认为他们在这里不能做得更好): //table/tbody/( let $matx := map:merge((1 to count(tr)) ! map:entry(.,map{})) return tr/( let $x := position() return *[name() = "td" or name() = "th"]/( let $str := string(), $pos := position(), $row := $matx($x), $y := ($pos to 1 + max(($pos, map:keys($row)))) => filter(function($i){ not(map:contains($row,$i)) }) => head() return ($x to $x + (if (@rowspan) then xs:integer(@rowspan) - 1 else 0)) => fold-left($matx, function($m,$i) { $m => map:put($i, $m($i) => map:put($y, $str)) }) ) ) ) 主要问题是我无法在循环 $matx 时更新全局 <tr>。我目前正在尝试用 fold-left 重构代码,但它已经变得一团糟。我希望有一个更简单的解决方案。 我在纯 XPath 中得到了第一个可行的解决方案。主要困难是使用 position() 时无法访问 fold-left()。 正如 @MartinHonnen 评论的那样,https://github.com/transpect/htmltables 中有一个 XSL 函数用于“扁平化”HTML 表格。如果您正在使用 XSLT,那么就不必费心使用 XPath; htmltable:normalize 甚至可以处理 colspan 属性,而我不这样做(尽管添加它应该不会太难)。 //table/tbody/( let $tr_seq := *, $i_seq := 1 to count($tr_seq) return $i_seq => fold-left(array{$i_seq ! map{}}, function($arr, $i) { let $tr := $tr_seq[$i], $td_seq := $tr/*, $j_seq := 1 to count($td_seq) return $j_seq => fold-left($arr, function($arr, $j) { let $td := $td_seq[$j], $data := normalize-space($td), $rowspan := max((1, $td ! xs:integer(@rowspan))), $map := $arr($i), $j2 := ($j to max(($j, map:keys($map))) + 1) => filter(function($k){ not(map:contains($map, $k)) }) => head() return ($i to $i + $rowspan - 1) => fold-left($arr, function($arr,$i) { $arr => array:put($i, $arr($i) => map:put($j2, $data)) }) }) }) => array:for-each(function($m) { map:keys($m) => sort() => for-each($m) }) ) 这里你得到了一个代表 HTML 表的数组(行 x 列),每个原子元素都是对应的 <td> 或 <th> 的规范化字符串: [ ["A","B","C","D"], ["A1","B12","C1","D123"], ["A2","B12","C23","D123"], ["A3","B3","C23","D123"] ] 然后您可以根据需要格式化该矩阵: ! ( array:for-each(., string-join(?, codepoints-to-string(9))) => string-join(codepoints-to-string(10)) ) A B C D A1 B12 C1 D123 A2 B12 C23 D123 A3 B3 C23 D123 A B
XPathNavigator.SetValue 抛出 NotSupportedException
我有以下代码,其最后一行在每次执行时都会导致 NotSupportedException,并且我还没有找到解决方法。这个假设的类似代码找到一本具有特定
我正在尝试在职业页面上抓取职位列表。我试图单击“加载更多”按钮,但似乎无法弄清楚。我想知道是否有人可以帮助我——我不断收到错误消息
如何通过 Selenium 和 Python 点击 Instagram 中的“现在不”按钮
我正在尝试使用我当前正在编码的“Instagram 机器人”登录 Instagram。我已经通过登录屏幕,通过“获取应用程序”屏幕以及它想要如何打开通知......
我有这些表值: ID 分数 总分 主题 代码 3789 15 40 科学 印度卢比 3789 25 40 匹配 尝试 3932 14 48 科学 欧元 3932 34 48 社会的 尝试 3957 42 42 数学 印度卢比 4871 11 31 英语 欧元 4...
Netopeer2-cli 订阅通知以获取更改的值以及 xpath
我正在使用netopeer2库并在不同的机器上运行netopeer2-cli和netopeer2-server。 我正在使用 subscribe rpc 订阅来自 netopeer2-cli 的配置更改通知。 子项...
如何在使用 XPath 解析时获取表格单元格值,并且单元格包含类似 <19.00 OR >23.99
实际上我需要解析一个 HTML 表格,并且该表格包含 HTML 字符,您可以在图像中看到。 我还需要每个单元格数据都具有该特殊字符。现在当我用
我正在创建一个机器人来在网站中自动登录。 到目前为止,它运行良好,但我需要单击屏幕顶部的按钮,但它不起作用 谷歌检查页面的代码是 我正在创建一个机器人来在网站中自动登录。 到目前为止,它运行良好,但我需要单击屏幕顶部的一个按钮,但它不起作用 来自谷歌检查页面的代码是 <div class="remoteQuickAction ng-isolate-scope dropdown-toggle" action-title="Keyboard" action-image="keyboard-white" uib-dropdown-toggle="" aria-haspopup="true" aria-expanded="false" style="" xpath="1"> <div class="xcc-icon-keyboard-white" style="position:relative;top:2px"> </div> <div class="remoteDisableSelection ng-scope" translate="Keyboard" style="">Keyboard</div> 我已经尝试将 XPATH 设置为 //div[@action-title='Keyboard'] (//div[@action-title='Keyboard'])[1] //*[@id="toolbar2"]/div[4]/div //*[@id="toolbar2"]/div[4] 我终于明白为什么它找不到 xPath 了。 我需要切换窗口,因为之前的命令是打开一个新的弹出窗口,机器人无法理解这一点。
通过使用纯 XPath 3.1(或 XQuery)查询存储在文本文件中的 XPaths 表达式来替换 JSON 模板中的“{{varname}}”标题
我有一个 HTML 文档: 标题 《逃亡》 ... 我有一个 HTML 文档: <html> <head> <title>Title</title> </head> <body> <h1><i>"Escape"</i></h1> <p> <b>`\n`</b> <p>& < ></p> <aside>1.5</aside> </body> </html> A file.txt 存储变量名称及其对应的 XPath: xpath:ref_1://body/h1/string() xpath:ref_2.1://body/p[1]/string() xpath:ref_2.2.1://body/p[2]/string() xpath:ref_3://body/aside[1]/number() 还有一个 JSON 模板 file.json: { "key_1": "{{ref_1}}", "key_2": { "key_2.1": "{{ref_2.1}}", "key_2.2": [ 0, "{{ref_2.2.1}}" ] } "key_3": "{{ref_3}}" } 我想通过评估存储在 "{{varname}}" 中的相应 XPath 来替换 JSON 中的 file.txt。预期输出为: { "key_1": "\"Escape\"", "key_2": { "key_2.1": "\n `\\n`\n ", "key_2.2": [ 0, "& < >" ] } "key_3": 1.5 } 通过使用 XPath 处理器定义的实现x:eval,我可以获得一个存储变量名称及其处理值的映射: let $vars_file := "file.txt", $json_file := "file.json" return let $doc := . , $map := map:merge( unparsed-text-lines($vars_file) ! ( let $record := tokenize(., ":"), $options := map{"language": $record[1]}, $key := $record[2], $value := $doc/x:eval($record[3], $options) return map{$key: $value} ) ) return $map 哪个输出: { "ref_1": "\"Escape\"", "ref_2.1": "\n `\\n`\n ", "ref_2.2.1": "& < >", "ref_3": 1.5 } 到目前为止一切顺利,但如何使用 $map 中的值更新 JSON? 解析深度嵌套的 JSON 并修改生成的 JTree 中的值似乎有点硬核... 一个不太稳健的解决方案可能是使用 fn:analyze-string 并替换结果中的匹配项: (: placeholder for the code in the question :) string-join( ($json_file => unparsed-text() => analyze-string("""\{\{[^}]*\}\}"""))/* ! ( if (name() = "match") then serialize($map(. => replace("^...|...$","")), map{"method": "json"}) else . ) ) 输出: { "key_1": "\"Escape\"", "key_2": { "key_2.1": "\n `\\n`\n ", "key_2.2": [ 0, "& < >" ] } "key_3": 1.5 }
这是一个示例 XML: 这是一个示例 XML: <Body> <Subsection lims:inforce-start-date="2018-12-15" lims:fid="170842" lims:id="170842"> <MarginalNote lims:inforce-start-date="2018-12-15" lims:fid="170843" lims:id="170843">Determination of rate — 2nd case</MarginalNote> <Label>(11.08)</Label> <Text>If A is greater than 4.95%, D is less than or equal to 4.95% and the percentage determined by the formula</Text> <Text>1/2(A - D) [...] is less than or equal to 0.1%, then the contribution rate for employees and employers for each year after the October 1 date referred to in subsection (11.05) is the rate determined by the formula</Text> <Text>4.95% + 1/2(A - 4.95%) + C </Text> </Subsection> </Body> 我想编写一个 XPath 查询,返回具有同级文本元素的文本元素。 我尝试了以下表达式的多种变体,但我不太能完全正确: $xPathFR->query("Body//Text[.= following-sibling]"); 任何帮助或指示将不胜感激! 您可以同时使用 following-sibling:: 和 preceding-sibling:: 轴: /Body//Text[following-sibling::Text or preceding-sibling::Text] 但可能更容易测试 Text 元素的父元素是否有多个 Text,然后选择那些 Text 兄弟姐妹: /Body/*[Text[2]]/Text
如何使用 Playwright 通过 Xpath/CSS 选择器定位元素
如何使用 Playwright TS/JS 通过 Xpath/CSS 选择器定位元素? Playwright 中有很多定位器(与 Selenium 相比) 例如 getByRole 和 getByText。 有没有像
我正在使用 Bash 脚本 # 定义 URL 和浏览器变量 sGDomain=“理想主义者” sGCitta="fucecchio-佛罗伦萨" sGTypo="vendita-case" iGPagina=1 # 开始...
用 XQuery/XPath 3.1 替换任意嵌套映射/数组中的字符串
我有一个从JSON文件解析的地图,例如: 让 $template := 地图{ “名称”:“{{名称}}”, “聚合评级”:地图{ " ratingValue": "{{评级...
如何区分 XPath 3.1 中的 Map、Array、String 等?
有没有一个函数可以测试(或返回).的类型?例如: ( root(), (), "a", 1, 地图{}, 数组{} ) !未知:类型(.) 节点 顺序 细绳 数字 地图 数组
如何使用 XPath 变量在 WordPress 中动态填充架构?
我的 WordPress 项目中有帖子类型“公司”的架构,但我也有 XPath 变量,但我不知道如何处理它们。任何可能在 XPath 工作过的人都可以帮助我...
如何通过属性名称选择所有元素,但使用 xpath 排除相同的子元素。 HTML 代码: 产品名称 如何通过属性名称选择所有元素,但使用 xpath 排除相同的子元素。 HTML 代码: <div c-store="test"> <div c-text>Product Name</div> <div c-store="test"> <div c-text>Product Name</div> <div c-store="test"> <div c-text>Product Name</div> </div> </div> </div> 结果应该是: <div c-store="test"> <div c-text>Product Name</div> </div> 每个 [c-store] 元素不应包含其他类似的 [c-store] 元素 这个 XPath, //div[@c-store="test"][not(div[@c-store="test"])] 将选择 div 值为 @c-store 的所有 "test" 元素,前提是 div 元素没有具有相同属性的子 div 元素。
我创建了一个脚本来检查复选框。单击复选框后,会打开一个新选项卡,但该复选框保持未选中状态
我想自动化注册过程,但无法使用 Playwright 选中该框。每次我单击该复选框时,我都会被重定向到一个新链接。在 DOM 中,当选中复选框时,
您可以根据 XML 文档验证 XPath 表达式来验证它,但是有没有一种简单的方法可以根据该文档的架构验证相同的 XPath 表达式? 假设我有一个 XSD 架构,例如...