0
を使用してXMLと同じレベルにある要素を移動するI次のXMLを持っている:DOM4J
<Vehicle xmlns="http://www.cartest.co.uk">
<Car>
<EngineSize>2100</EngineSize>
<Color>Green</Color>
<NoOfDoors>5</NoOfDoors>
<MaxSpeed>150</MaxSpeed>
<Interior>Leather</Interior>
</Car>
<Car>
<EngineSize>1000</EngineSize>
<Color>Red</Color>
<NoOfDoors>3</NoOfDoors>
<MaxSpeed>120</MaxSpeed>
<Interior>Leather</Interior>
</Car>
<Car>
<EngineSize>1400</EngineSize>
<Color>Blue</Color>
<MaxSpeed>100</MaxSpeed>
<Interior>Fabric</Interior>
</Car>
</Vehicle>
私は何をしたいことは、文書を解析し、NoOfDoors要素が存在する場合、その上にMaxSpeed要素を移動しています。私は(他の試みのロット間)以下のコードスニペットを作成していると私はちょうどそれが動作するように取得するように見えるカント
<Vehicle xmlns="http://www.cartest.co.uk">
<Car>
<EngineSize>2100</EngineSize>
<Color>Green</Color>
<MaxSpeed>150</MaxSpeed>
<NoOfDoors>5</NoOfDoors>
<Interior>Leather</Interior>
</Car>
<Car>
<EngineSize>1000</EngineSize>
<Color>Red</Color>
<MaxSpeed>120</MaxSpeed>
<NoOfDoors>3</NoOfDoors>
<Interior>Leather</Interior>
</Car>
<Car>
<EngineSize>1400</EngineSize>
<Color>Blue</Color>
<MaxSpeed>100</MaxSpeed>
<Interior>Fabric</Interior>
</Car>
</Vehicle>
:だから私は次の出力を得るでしょう、上の例のXMLを取っ
:
// Parse the XML document
doc = ParseDocument(fileName);
// Deal with default namespace
HashMap map = new HashMap();
map.put("ns", "http://www.cartest.co.uk");
Dom4jXPath xpath = new Dom4jXPath("//ns:Car");
xpath.setNamespaceContext(new SimpleNamespaceContext(map));
List<Node> nodes = xpath.selectNodes(doc);
for(Node node : nodes)
{
Element element = (Element)node;
Iterator<Element> iterator = element.elementIterator();
while(iterator.hasNext())
{
Element currentElement = (Element)iterator.next();
if(currentElement.getName().equals("NoOfDoors"))
{
List<Element> elementList = currentElement.getParent().elements();
for(Element elements : elementList)
{
if(elements.getName().equals("MaxSpeed"))
{
Node moveNode = elements.detach();
elementList.add(elementList.indexOf(elements), (Element) moveNode);
}
}
}
}
}
実行が次のエラーを与えるコード:
java.lang.IndexOutOfBoundsException: Index: -1
エニオンe Dom4Jを使ってこれを行う方法を知っていますか?私が持っているように見える問題は、私が要素を切り離したときに、私はそれを私が持っているリストに再び追加するように思えます。