需要检查处理指令"<?covid19?>"是否存在于XML中


<?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文档是XMLDocumenttheDocument;您可以通过使用DOMParserAPI解析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");

NodeIteratorAPI

使用NodeIteratorAPI(使用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_。

TreeWalkerAPI(使用theDocument.createTreeWalker(与NodeIteratorAPI非常相似。

XPath迭代程序API

使用XPath(使用theDocument.evaluate(也可以查找所有处理指令。结果为XPathResults。

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

相关内容

  • 没有找到相关文章

最新更新