Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用xpath删除节点_Xml_Xpath_Domdocument - Fatal编程技术网

Xml 使用xpath删除节点

Xml 使用xpath删除节点,xml,xpath,domdocument,Xml,Xpath,Domdocument,我的xml结构如下所示: <a> <b> <foo>null</foo> </b> <b> <foo>abc</foo> </b> <b> <foo>efg</foo> </b> </a> 这可能吗?我知道我可以调用removeChild(childElem

我的xml结构如下所示:

<a>
   <b>
      <foo>null</foo>
   </b>
   <b>
      <foo>abc</foo>
   </b>
   <b>
      <foo>efg</foo>
   </b>
</a>
这可能吗?我知道我可以调用
removeChild(childElement)
,但不确定如何指定删除上面的特定嵌套元素

更新:根据下面的答案,我尝试了:

String query = "/a/b[foo[text() = 'null']]";
Object result = (xpath.compile(newQuery)).evaluate(doc, NODE);
NodeList nodes = (NodeList)result;
for (int i = 0; i < nodes.getLength(); i++)
{
    Node node = nodes.item(i);
    doc.removeChild(node);
}
String query=“/a/b[foo[text()='null']]”;
对象结果=(xpath.compile(newQuery)).evaluate(doc,NODE);
节点列表节点=(节点列表)结果;
对于(int i=0;i

I get
NOT\u FOUND\u ERR:尝试在不存在节点的上下文中引用该节点

要获取该节点,可以使用XPath:

/a/b[foo[text() = 'null']]
将不起作用,因为您尝试删除的节点不是文档节点的子节点,而是文档元素(
a
)的子节点,而文档元素本身是文档根节点的子节点。您需要在正确的父节点上调用
removeChild

node.getParentNode().removeChild(node);

是的,我能做到。但是如果我就此调用removeChild,它会只删除
null
,还是
null
。另外,我不想触摸根节点
。根据巡视问题,您想删除
null
,对吗?是的。我想这个查询也会尝试删除/修改
,谢谢您的时间。我正在尝试新的查询,但仍然得到一个错误。有什么建议吗?可能是重复的
doc.removeChild(node);
node.getParentNode().removeChild(node);