如何在typescript中使用xpath-ts + xmldom包?

0lvr5msh  于 2022-12-19  发布在  TypeScript
关注(0)|答案(1)|浏览(196)

我想在typescript中使用xmldom + xpath。因为xpath包没有类型。所以我安装了xpath-ts + xmldom-ts包。
但是包文档上的示例不起作用。
示例:

import { DOMParserImpl as dom } from 'xmldom-ts';
import * as xpath from 'xpath-ts';
 
const xml = '<book><title>Harry Potter</title></book>';
const doc = new dom().parseFromString(xml);
const nodes = xpath.select('//title', doc);
 
console.log(nodes[0].localName + ': ' + nodes[0].firstChild.data);
console.log('Node: ' + nodes[0].toString());

在执行时,我得到了错误:

src/importDWD.ts:100:43 - error TS2345: Argument of type 'Document' is not assignable to parameter of type 'Node'.
  Type 'Document' is missing the following properties from type 'Node': observers, addObserver, delObserver

100     const nodes = xpath.select('//title', doc);
                                              ~~~

还有很多其他的编译错误
如何在typescript中使用xpath?

l2osamch

l2osamch1#

安装xmldom包+类型和xpath-ts包

npm install --save-dev @types/xmldom

现在可以通过xpath表达式查找XML节点:

let xml: string = '<book><title>Harry Potter</title></book>';

const parser = new xmldom.DOMParser()
let doc: Document = parser.parseFromString(xml)

let nodes: Node[] = xpath.select('//title',doc) as Node[]

console.log(nodes[0].nodeName + ': ' + nodes[0].firstChild.nodeValue);
console.log('Node: ' + nodes[0].toString());

输出

title: Harry Potter
Node: <title>Harry Potter</title>

所述求值函数

let xml: string = '<book><title>Harry Potter</title></book>';

const parser = new xmldom.DOMParser()
let doc: Document = parser.parseFromString(xml)

let result: XPathResult = xpath.evaluate("/book/title",
    doc, null, xpath.XPathResult.ANY_TYPE, null)

let node = result.iterateNext();
while (node) {
    console.log(node.nodeName + ': ' + node.firstChild.nodeValue);
    console.log('Node: ' + node.toString());

    node = result.iterateNext();
}

相关问题