新規ノード追加

JDK標準のXPathではできない機能の紹介です。
今回は、新規にノード(または属性)を追加する方法です。

追加したい XPathを、JXPathContext.create() メソッドに渡せばよいのですが、
少しおまじないが必要です。
おまじないとは、JXpathContext.setFactory()メソッドで、ノード追加用のユーティリティクラス
である、MyJXPathFactory() をセットしていることです。

MyJXPathFactoryクラスとは

JXPathContextが、DOM上に存在しないXPathを発見したときに、ノード追加要求を依頼する
ユーティリティクラスで、利用者が自分で用意しなければなりません。

まずは、管理人が自作で作った必要最小限のサンプルソースを公開します。
これだけでも、大体の用途には事足りると思いますが、拡張は各自でトライしてみてください。
MyJXPathFactory.java

参考1

JXPathContext.create() は 既に存在しているXPathを渡すと、何もしません

参考2

JXPathContext.create() で、既存のXPathと同じ表現でノードを追加したい場合は
配列の添え字と併用すると良いでしょう。なお、XPathでは配列は 1 から始まります。

(例)新しく/price/food/item の 4番目を追加する場合
/price/food/item[4] を create に渡します。

参考3

JXPathContext には create()メソッド以外に、createPathAndSetValue() というメソッドもあり、
こちらを使うと、新規パスの作成および値のセットを一気にやってくれます。