当存在命名空间时,无法使用 XPath 读取节点值

Unable to read nodeValue using XPath when namespace is present

本文关键字:XPath 读取 节点 命名空间 存在      更新时间:2023-09-26
<?xml version="1.0" encoding="UTF-8" ?>
<BO xmlns="http://hg.com/bo" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:schemaLocation="http://hg.com/bo http://hg.com/bo.xsd">
<b>Harsh</b>
</BO>

我正在尝试使用 XPath 读取 Harsh 内部标签。

当命名空间不存在时,我可以使用此 javascript 行

var path = "/BO/b";
var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);

我应该在路径中进行哪些更改才能获取节点 b?

为了对(默认)命名空间中定义的 XML 内容使用 XPath 表达式,需要指定命名空间前缀映射。您需要某种方法在 XPath 表达式中指定要查找"http://hg.com/bo"命名空间中的所有"b"元素。

在这种情况下,您可以使用"ex"前缀并将此前缀映射到"http://hg.com/bo"命名空间 URI。这将导致以下 XPath 表达式应返回在"http://hg.com/bo"命名空间中声明的所有"b"元素:"//ex:/BO/b"。