给默认命名空间取别名
原文出现 xmlns="urn:books" 时,填入 {"b":"urn:books"} 并使用 //b:book。直接写 //book 只会匹配没有命名空间的元素。
XML 工具
点击求值或按 Ctrl/Cmd+Enter;修改输入、映射或结果视图后重新运行。
XML 和表达式仅在当前浏览器处理,不向服务器发送文档。
使用 ASCII 前缀,例如 {"b":"urn:books"};原文前缀可以不同。
XPath 1.0,按 Ctrl/Cmd+Enter 手动运行。标量在 JSON 中用字符串表示,保留 NaN 和 Infinity。
结果已过期,重新求值后才能导出。
XPath 测试适合排查样例正常、真实接口数据却没有匹配的情况。默认命名空间、属性条件以及后代节点的位置,都会改变同一条表达式的含义。
XPath 在线测试保留原始 XML 文本,不会先格式化再查询。比较 XPath 表达式的节点结果与字符串值,可以看清嵌套文本、空白和 XML 命名空间究竟影响了哪一步。
XPath 测试区分节点、文本和绝对路径。同样选中两本书的标题,可以查看两个序列化片段、两个文本值或两条可回查的路径;切换视图不会改写原文。
前缀只是别名。把 b 绑定到 urn:books 后,可以用 //b:book 查询原文采用其他前缀的节点;另一个命名空间里的同名元素不会混入结果。
原文出现 xmlns="urn:books" 时,填入 {"b":"urn:books"} 并使用 //b:book。直接写 //book 只会匹配没有命名空间的元素。
文本视图读取每个选中节点的完整字符串值,包含后代文本。//title/text() 则只选中直接文本节点,混合内容中的这两种结果可能不同。
修改 XML、表达式、映射或视图后,复制与下载立即禁用。成功重新求值才可导出;界面每次增加 50 条结果,导出包含本次全部成功结果。
查询可以产生节点集合、字符串、数字或布尔值。count(//book)、string(//title) 和 boolean(//missing) 的类型分别保留。JSON 的 values 数组统一使用字符串,因此 NaN 与 Infinity 不会被偷偷变成 null。
//book[@id="b1"] 按属性筛选元素,//@id 提取属性,//book[price>15]/title 使用数字条件。匹配数量为 0 仍然成功,结果中的 values 是空数组,可以正常复制和下载。
路径包含同名兄弟节点的位置。带命名空间的元素使用 local-name() 与 namespace-uri(),不依赖当前前缀映射;路径只对应当前文档,结构改变后索引也可能改变。
子节点用 / 连接,例如 /library/book;属性用 @id;直接文本用 text()。要获取整个元素含后代的文本,可以选中元素后改用文本视图并重新求值。
不支持。实际运行的是浏览器原生 XPath 1.0 引擎。matches() 等高版本函数需要另一套引擎,表达式被拒绝并不代表 XML 内容有错。
//book[@id="b1"] 选取指定属性的元素,//book/@id 提取属性值。属性名区分大小写,没有前缀的属性不会继承默认命名空间。
单斜杠选择下一层直接节点,双斜杠从当前位置搜索后代。/library/book 固定从根元素往下查,//book 则可以找到更深层的 book。
XML 的默认命名空间覆盖无前缀元素,但 XPath 1.0 中无前缀的名称并不自动使用它。为 URI 绑定别名,再在表达式中使用这个别名。
发现了意外结果?