我在Java中使用以下XML和代码运行XPath:
代码:
当然,这之后还有更多的代码,但我没有粘贴在这里,因为我认为这样可能会更加混乱。
但是想法是,我希望从所有成员的好友列表节点中选择所有具有ID 0003的好友节点,然后将其从XML文件中删除。XPath通过选择所有具有value=0003的“friend”节点来工作。我知道我可以使用XML文档对象的removeChild()方法。但问题是如何直接删除所有内容,而不需要从其父级开始进行层层嵌套循环?removeChild()方法需要我知道父级的父级的父级。
谢谢!
更新: 这就是我使用XPath的方式:
xmlDoc是一个XML文档对象,其中包含解析的XML文件。XML工作正常。问题在于它不返回引用,而是返回一个全新的节点列表,这使我无法回到原始的XML文档进行修改。
<?xml version="1.0" encoding="UTF-8"?>
<list>
<member name="James">
<friendlist>
<friend>0001</friend>
<friend>0002</friend>
<friend>0003</friend>
</friendlist>
</member>
<member name="Jamie">
<friendlist>
<friend>0003</friend>
<friend>0002</friend>
<friend>0001</friend>
</friendlist>
</member>
<member name="Katie">
<friendlist>
<friend>0001</friend>
<friend>0003</friend>
<friend>0004</friend>
</friendlist>
</member>
</list>
代码:
try {
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression pathExpr = xpath.compile("/list/member/friendlist/friend[.='0003']");
} catch (XPathExpressionException e) {
当然,这之后还有更多的代码,但我没有粘贴在这里,因为我认为这样可能会更加混乱。
但是想法是,我希望从所有成员的好友列表节点中选择所有具有ID 0003的好友节点,然后将其从XML文件中删除。XPath通过选择所有具有value=0003的“friend”节点来工作。我知道我可以使用XML文档对象的removeChild()方法。但问题是如何直接删除所有内容,而不需要从其父级开始进行层层嵌套循环?removeChild()方法需要我知道父级的父级的父级。
谢谢!
更新: 这就是我使用XPath的方式:
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression pathExpr = null;
try {
pathExpr = xpath.compile("/list/member/friendlist/friend[.='0003']");
} catch (XPathExpressionException e) {
e.printStackTrace();
}
NodeList list = null;
try {
list = (NodeList) pathExpr.evaluate(xmlDoc, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
xmlDoc是一个XML文档对象,其中包含解析的XML文件。XML工作正常。问题在于它不返回引用,而是返回一个全新的节点列表,这使我无法回到原始的XML文档进行修改。
xpath.getClass()
). - jtahlborn