Ich habe die folgende XML:Verschieben eines Elements auf dem gleichen Niveau von 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>
Was ich tun möchte, ist das Dokument analysieren und wenn das NoOfDoors Element vorhanden ist, über den MaxSpeed Element bewegen.
So das obige Beispiel XML nehmen, würde ich die folgende Ausgabe:
<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>
ich den folgenden Code-Snippet erstellt haben (unter vielen anderen Versuchen) und ich kann nicht scheinen, nur um es an die Arbeit :
// 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);
}
}
}
}
}
Der Code bei der Ausführung der folgenden Fehler gibt:
java.lang.IndexOutOfBoundsException: Index: -1
Anyon Wie kann man dies mit Dom4J machen? Das Problem, das ich zu haben scheint, ist, wenn ich das Element loslasse, ich kann es einfach nicht wieder in die Liste aufnehmen, die ich habe.