📜  javascript xpath (1)

📅  最后修改于: 2023-12-03 15:01:39.171000             🧑  作者: Mango

JavaScript XPath

XPath 是一种用于 XML 文档的查询语言,可以快速准确地定位节点。而 JavaScript 支持 XPath 解析,开发者可以在 JavaScript 环境中使用 XPath 来操作 XML 文档。

XPath 基础语法

XPath 使用路径表达式来选取 XML 文档中的节点。下面是一些常用的 XPath 语法:

  • /path/to/node:从根节点开始向下查找节点。
  • path/to/node:从当前节点开始向下查找节点。
  • path/to/*:查找当前节点的所有子节点。
  • path/to/[@attribute='value']:查找具有指定属性和属性值的节点。
  • path/to[@attribute]/node:查找具有指定属性的节点下的子节点。
  • path/to[node()='value']:查找节点值等于指定值的节点。
JavaScript XPath API

JavaScript 提供了两种方式来使用 XPath:

Document.evaluate()
const xpathResult = document.evaluate(
  'path/to/node',
  document, // 可以是 Document、Element 或 DocumentFragment。
  null, // namespace resolver
  XPathResult.ANY_TYPE, // 结果类型
  null // previous result
);
  • xpath: XPath 表达式。
  • contextNode: 可以是 Document、Element 或 DocumentFragment。
  • namespaceResolver: 命名空间解析器。
  • resultType: 结果类型,包括 XPathResult.NUMBER_TYPEXPathResult.STRING_TYPEXPathResult.BOOLEAN_TYPEXPathResult.ANY_UNORDERED_NODE_TYPE 等。
  • previousResult: 用于优化的前一次查询结果。
XPathEvaluator.evaluate()
const xpathEvaluator = new XPathEvaluator();
const xpathResult = xpathEvaluator.evaluate(
  'path/to/node',
  document, // 可以是 Document、Element 或 DocumentFragment。
);
  • xpath: XPath 表达式。
  • contextNode: 可以是 Document、Element 或 DocumentFragment。
  • namespaceResolver: 命名空间解析器。

返回的 xpathResult 对象包含了多个方法和属性,例如 snapshotLengthiterateNext()singleNodeValue 等。

示例

下面的示例代码使用 Document.evaluate() 方法查询 XML 文档中的节点:

const xml = `
  <employees>
    <employee>
      <name>John Smith</name>
      <age>30</age>
      <gender>Male</gender>
    </employee>
    <employee>
      <name>Jane Doe</name>
      <age>25</age>
      <gender>Female</gender>
    </employee>
  </employees>
`;

const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xml, 'application/xml');

const xpathResult = xmlDoc.evaluate(
  '//employee/name',
  xmlDoc,
  null,
  XPathResult.ANY_TYPE,
  null
);

let node = xpathResult.iterateNext();
while (node) {
  console.log(node.textContent); // John Smith Jane Doe
  node = xpathResult.iterateNext();
}
总结

JavaScript 中的 XPath 可以帮助开发者在 XML 文档中快速准确地定位节点,以便进行后续操作。开发者可以使用 Document.evaluate()XPathEvaluator.evaluate() 方法来查询节点。