Reputation: 747
I have xml that looks somewhat similar to the following. I need to get values from attributes and tags and store them. But i cant understand how to get to level 2(3,4, etc) nested elements. I use following code that i found on the internet, it uses DOM but i cant get correct RegNumber and its attributes. Thanks in advance.
nodeList = xmldocument.getElementsByTagName("Header"); if (nodeList != null && nodeList.getLength() > 0) { for (int i = 0; i < nodeList.getLength(); i++) { //get the header element Element header = (Element) nodeList.item(i); System.out.println("Element: " + ((Element)nodeList.item(i)).getNodeName()); System.out.println(header.getAttribute("time")); } } nodeList = xmldocument.getElementsByTagName("Document"); if (nodeList != null && nodeList.getLength() > 0) { for (int i = 0; i < nodeList.getLength(); i++) { //get the document element Element document = (Element) nodeList.item(i); System.out.println("Element: " + ((Element)nodeList.item(i)).getNodeName()); System.out.println(document.getAttribute("Id")); nodeList = document.getElementsByTagName("RegNumber"); for (int j = 0; j < nodeList.getLength(); j++) { //get the RegNumber element Element regNumber = (Element) nodeList.item(j); System.out.println("Element: " + ((Element)nodeList.item(j)).getNodeName()); System.out.println(regNumber.getAttribute("regpoint")); } } }
xml:
<XML xsi:schemaLocation="http://www.codetools.it XSD2.xsd" xmlns="http://www.codetools.it" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header time="2001-12-17T09:30:47Z" />
<Document Id="456">
<RegNumber regpoint="" regdate="2001-12-17T09:30:47Z">123/456</RegNumber>
<Confident flag="0"/>
<DocNumber kind="">
<RegNumber RegPoint="" regdate="2001-12-17T09:30:47Z">456/789</RegNumber>
<Organization fullname="lol" shortname="" ownership="lol" ogrn="78945612" inn="">
<OfficialPerson>
<Name Firstname="John"/>
<Official Department="" post=""/>
<SignDate>2001-12-17T09:30:47Z</SignDate>
</OfficialPerson>
<Econtact type="1">[email protected]</Econtact>
<Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/>
</Organization>
</DocNumber>
<DocTransfer os="Windows" type=".docx" type_ver="" char_set="" description="kkkk">
</DocTransfer>
<Reghistory idnumber="">
<RegNumber RegPoint="" regdate=""/>
<Organization fullname="" shortname="" ownership="" ogrn="" inn="">
<Econtact type=""/>
<Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/>
</Organization>
</Reghistory>
<Author>
<Organization fullname="" shortname="" ownership="" ogrn="12345678" inn="">
<OfficialPerson>
<Name Firstname="" />
<Official Department="" post=""/>
<SignDate>2011-12-17T09:30:47Z</SignDate>
</OfficialPerson>
<Econtact type="Рї">[email protected]</Econtact>
<Address street="" postcode="1234" postbox="" flat="" district="" region="" country="" nontypical="" house="12"/>
</Organization>
<PrivatePerson>
<Name Surname="" Firstname="" Fathername=""/>
<Econtact type=""/>
<Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/>
<SignDate/>
<Rank privilege="" socialposition="" sex=""/>
</PrivatePerson>
</Author>
<Validator attestation="0">
<DocNumber kind="наказ">
<RegNumber RegPoint="" regdate="2001-12-17T09:30:47Z"/>
<Organization fullname="" shortname="" ownership="" ogrn="14725836" inn="">
<Econtact type="Рї">[email protected]</Econtact>
<Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/>
</Organization>
</DocNumber>
<Organization fullname="" shortname="РљРњРЈ" ownership="" ogrn="96325878" inn="">
<Econtact type="String">[email protected]</Econtact>
<Address street="Пушкіна" settlement="" postcode="4563" postbox="" flat="" district="" region="" country="" nontypical="" house="23"/>
<OfficialPerson>
<Name Surname="" Firstname="" Fathername=""/>
<Official Department="" post=""/>
<SignDate>2011-12-17T09:30:47Z</SignDate>
</OfficialPerson>
</Organization>
<PrivatePerson>
<Name Surname="" Firstname="" Fathername=""/>
<Econtact type=""></Econtact>
<Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/>
<SignDate></SignDate>
<Rank privilege="" socialposition="" sex=""/>
</PrivatePerson>
</Validator>
<Addressee>
<Referred id="" retype="">
<RegNumber regdate="" regpoint=""/>
<TaskNumber taskDate=""/>
</Referred>
<Organization fullname="String" shortname="" ownership="" ogrn="85236974" inn="">
<OfficialPerson>
<Name Surname="" Firstname="" Fathername=""/>
<Official Department="" post=""/>
</OfficialPerson>
<Econtact type="Рї">[email protected]</Econtact>
<Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" type="" house=""/>
</Organization>
<PrivatePerson>
<Name Surname="" Firstname="" Fathername=""/>
<Econtact type=""></Econtact>
<Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/>
<Rank privilege="" socialposition="" sex=""/>
</PrivatePerson>
</Addressee>
<Writer>
<Organization fullname="" shortname="" ownership="" ogrn="" inn="">
<OfficialPerson>
<Name Surname="" Firstname="" Fathername=""/>
<Econtact type=""></Econtact>
</OfficialPerson>
</Organization>
<PrivatePerson>
<Name Surname="" Firstname="" Fathername=""/>
<Econtact type=""></Econtact>
</PrivatePerson>
</Writer>
</Document>
edit. As advised i try to figure out JAXB thingy. xjc tool generated 3 classes: ObjectFactory, package-info, XML. I found this code to create object from xml:
public static void main(String[] args) {
try {
File file = new File("F:\\Untitled3.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(XML.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
XML xml = (XML) jaxbUnmarshaller.unmarshal(file);
System.out.println(xml);
} catch (JAXBException e) {
e.printStackTrace();
}
}
Is this the correct way, or i need to use ObjectFactory?:
ObjectFactory f =new ObjectFactory();
XML xml1 = f.createXML();
How do i create object with all tags and attributes, and then create xml file from it? Im new to java and jaxb stuff, so please bear with me.
Upvotes: 1
Views: 13392
Reputation: 9320
It is usually not meaningful or commonly useful for method letting you access nodes at certain depth. This is not only about Java, but rather the DOM spec, and I believe that's the right decision.
People usually access nodes through one of many meaningful ways:
Look up xpath and that would be really helpful.
Upvotes: 3
Reputation: 5578
Use "getElementsByTagName" function again on each node to get elements by tag name. Obviously...
Here's my sample code that goes few levels deep:
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(acpFile);
Element docEle = doc.getDocumentElement();
NodeList series = docEle.getElementsByTagName("dod:recordSeries");
if(series != null && series.getLength()>0)
{
for(int i=0; i<series.getLength(); i++)
{
Element serie = (Element)series.item(i);
System.out.println("S -- "+serie.getAttribute("view:childName"));
NodeList categories = serie.getElementsByTagName("dod:recordCategory");
for(int j=0; j<categories.getLength(); j++)
{
Element category = (Element)categories.item(j);
System.out.println("C ---- "+category.getAttribute("view:childName"));
NodeList recordFolders = category.getElementsByTagName("rma:recordFolder");
for(int k=0; k<recordFolders.getLength(); k++)
{
Element folder = (Element)recordFolders.item(k);
System.out.println("F ------ "+folder.getAttribute("view:childName"));
}
}
}
}
Upvotes: 2