<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1d1 20130915//EN" "JATS-journalpublishing1.dtd"[]>
<article dtd-version="1.1d1" article-type="review-article" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xml:lang="en">
<front>
<?covid19?>
我需要查找XML中是否存在<?covid19?>
处理指令。
jQuery中的伪代码:
$("<?covid19?>").length
虽然没有CSS选择器来选择元素等处理指令,但有两个不错的API可以用来避免手动迭代DOM树。
假设您的XML文档是XMLDocument
theDocument
;您可以通过使用DOMParser
API解析XML字符串来创建一个:
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<root>
<?covid19 content-a?>
<?covid19 content-b?>
<?thing x?>
<child>
<?covid19 content-c?>
<?thing y?>
</child>
<covid19>
Reject this node.
</covid19>
</root>`,
theDocument = new DOMParser().parseFromString(xml, "text/xml");
NodeIterator
API
使用NodeIterator
API(使用theDocument.createNodeIterator
(可以找到所有处理指令。
const iteratorAll = theDocument
.createNodeIterator(theDocument, NodeFilter.SHOW_PROCESSING_INSTRUCTION);
const iteratorCOVID19 = theDocument
.createNodeIterator(theDocument, NodeFilter.SHOW_PROCESSING_INSTRUCTION, {
acceptNode(node){
if(node.nodeName.toLowerCase() === "covid19"){
return NodeFilter.FILTER_ACCEPT;
}
return NodeFilter.FILTER_SKIP;
}
});
CCD_ 8是示出所有处理指令的CCD_。CCD_ 10是示出名称为CCD_ 12的所有处理指令的CCD_。
TreeWalker
API(使用theDocument.createTreeWalker
(与NodeIterator
API非常相似。
XPath迭代程序API
使用XPath(使用theDocument.evaluate
(也可以查找所有处理指令。结果为XPathResult
s。
const xPathAll = theDocument
.evaluate("//processing-instruction()", theDocument, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE);
const xPathCOVID19 = theDocument
.evaluate("//processing-instruction('covid19')", theDocument, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE);
XPath语法解释:
令牌 | 含义 |
---|---|
// | 获取所有子体 |
processing-instruction() | 获取"处理指令"类型的节点 |
processing-instruction('covid19') | 获取节点名为covid19 |