beginners question - create an element
Hello, just starting to learn how to work with XML via Java and I have encountered an error.
I have an XML file with car owners and their cars.
XML file:
Code:
<?xml version="1.0" encoding="utf-8"?>
<people>
<person id="1"> <!-- id is required, unique (positive) integer
(no two cars with same ID) -->
<name>Pavel</name> <!-- name is required, non-empty string -->
<surname>Novák</surname> <!-- surname is required, non-empty string -->
<salary>12000.00</salary> <!-- salary is required, positive number
with 2 decimal places precision, e.g. 10000.50 -->
<note>Poznámka</note> <!-- note optional element, repeatable, contains any string -->
<cars> <!-- cars optional element, contains any number of child-element car -->
<car id="ZNC 33-93"> <!-- id is required, format like this: LLL NN-NN where L is a letter, N a ciphers 0..9
two or three letters, space, two ciphers, comma and 2 ciphers) -->
<type>Škoda 120 GLX</type> <!-- type is required, non-empty string -->
<fuel>gasoline</fuel> <!-- fuel is required, enumeration with values:
gasoline/diesel/lpg/electricity -->
<year>1985</year> <!-- year is required, 4-ciphers positive integer number -->
<country>cz</country> <!-- country is required, 2 chars string -->
<price>15000</price> <!-- price is required, positive integer -->
</car>
</cars>
</person>
<person id="2" age="21">
<name>Libor</name>
<surname>Polák</surname>
<salary>9000.00</salary>
</person>
<person id="3">
<name>Jan</name>
<surname>Hroza</surname>
<salary>68475.25</salary>
<cars>
<car id="6B6 82-51">
<type>Škoda Octavia Combi</type>
<fuel>UNKNOWN</fuel>
<year>2009</year>
<country>cz</country>
<price>200000</price>
</car>
<car id="ZNH 28-51">
<type>Škoda Octavia Combi</type>
<fuel>diesel</fuel>
<year>2001</year>
<country>cz</country>
<price>50000</price>
</car>
<car id="ZNE 11-75">
<type>Škoda Favorit</type>
<fuel>lpg</fuel>
<year>1995</year>
<country>cz</country>
<price>20000</price>
</car>
<car id="ZN 85-51">
<type>Prototyp č. 1 vyrobený v dílně Franty Vomáčky</type>
<fuel>electricity</fuel>
<year>1995</year>
<country>cz</country>
<price>150000</price>
</car>
</cars>
</person>
</people>
And I want to write a method, that changes the owner of the car, i.e. moves the car element to another person.
Here is what I got so fat, it seems to remove the element, but does not create the new one>
Code:
public class Main {
/**
* W3C object model representation of a XML document.
* Note: We use the interface(!) not its implementation
*/
private Document doc;
/**
* Task 1, part A: Complete this method.
*
* Sells the car identified by carId to the person identified by personId.
* (i.e. moves the respective car element into the cars element
* of the recipient person, new owner.
* Note that if the recipient does not have any cars yet,
* the containing cars element must first be created before
* the cars is moved into it.
* if either the car or the recipient is not present, the method
* does not change nor report anything.
*
* @param carId id of the car to be sold
* @param personId person receiving the car
* @throws IllegalArgumentException if any parameter is null or empty
*/
public void sellCarTo(String carId, String personId) {
Element car = null;
Element person;
Element pomCar = null;
NodeList carList = doc.getElementsByTagName("car");
for(int i = 0; i < carList.getLength(); i++) {
car = (Element) carList.item(i);
String pomCarId = car.getAttribute("id");
if(pomCarId.equals(carId)) {
String myCarId = pomCarId;
pomCar = car;
car.getParentNode().removeChild(car);
}
}
NodeList peopleList = doc.getElementsByTagName("person");
for(int i = 0; i < peopleList.getLength(); i++) {
person = (Element) peopleList.item(i);
String pomPersonId = person.getAttribute("id");
if(pomPersonId.equals(personId)) {
Element newCar = null;
NodeList cars = person.getElementsByTagName("cars");
if(cars.getLength() == 0) {
newCar = doc.createElement("cars");
person.appendChild(pomCar);
} else {
newCar = (Element) cars.item(carList.getLength() + 1);
}
newCar.appendChild(pomCar);
}
}
}
And I can´t really find the problem. If anyone can point me in the right direction, I would be really grateful.