次のxmlとコードを使用して、JavaでXPathを実行します。
<?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は、値が0003であるすべての「友達」ノードを選択することによって機能します。XML Documentオブジェクトの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だけですが、まったく新しいノードリストです。そのため、元のXMLドキュメントを参照して修正することはできません。
返されたNodeListの各ノード:
n.getParentNode().removeChild(n);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加