編集:Blaiseの回答で使用したように、XMLドキュメントをロードする方法は次のとおりです。ドキュメント全体ではなくノードで作業したいので、このようにロードしています。ドキュメント全体を使用しても、この方法でロードするときに問題が発生します。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setNamespaceAware(false);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("[path to doc]/input.xml");
TestClass testClass = (TestClass) unmarshaller.unmarshal(doc);
私は次のようなXMLを持っています:
<test>
<items>
<item type="cookie">cookie</item>
<item type="crackers">crackers</item>
</items>
</test>
そしてクラス:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "test")
public class TestClass
{
@XmlPath("items/item/text()")
@XmlElement
private ArrayList<String> itemList = new ArrayList<String>();
// getters, setters omitted
}
上記のコードは、を持っているかどうかに関係なく機能@XmlElement
し、[cookie、crackers]を含むArrayListを取得します。
上記の宣言を次のように変更すると
@XmlPath("items/item/@type")
@XmlElement
private ArrayList<String> itemList = new ArrayList<String>();
ArrayListが空です。
私の最終的な目標は、属性を設定して、XMLが次のようになるようにすることです。
<test>
<items>
<item type="cookie"/>
<item type="crackers"/>
</items>
</test>
私がやろうとしていることは、XPathを使用して属性のリストを引き出すことは可能ですか?もしそうなら、どのようにですか?
ありがとうございました。