編集:私はBlaiseの答えで使ったので、XML文書をどのようにロードしているのですか。私はこのように読み込んでいます。なぜなら、私はノード全体ではなく、ドキュメント全体で作業したいからです。ドキュメント全体を使用していても、この方法でロードするときにはまだ問題があります。MOXyとXPathを使用すると、属性のリストを非整列化できますか?
<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
}
上記のコードは、私かどうか動作します私はこのような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);
@XmlElement
があり、[cookie、crackers]を含むArrayListが取得されます。
私は
@XmlPath("items/item/@type")
@XmlElement
private ArrayList<String> itemList = new ArrayList<String>();
に上記の宣言を変更した場合、私のArrayListは空です。 、
<test>
<items>
<item type="cookie"/>
<item type="crackers"/>
</items>
</test>
は私が何をしようとしているです可能なXPathを使用して、属性のリストを引き出し、そしてもしそうならを:
私の究極の目標は、ちょうど私のXMLは次のようになりますので、属性を持つことです、 どうやって?
ありがとうございます。
あなたの例が示すように作業を行いますが、私は、私は、ドキュメントをロードする方法とそれを組み合わせたときに、私の出力はこれが(私の質問に私が作った編集を参照してください) : '2.3.0.v20110604-r9504 <?xml version =" 1.0 "encoding =" UTF-8 "?> '結局ノードを扱う必要があります。ノードとMoxy/JAXB経由でそれを実行する? –
Paul
私はもう少しテストを行い、各項目から値と属性の両方を取得しようとしました。値は取得できますが、属性はまだ取得できません。 – Paul
最後のテストが1つあります。アイテムに属性を追加すると、 ''、それを検索できます。 '@XmlPath(" items/@ type ")'、 'item'からではありません。 –
Paul