Parsing XML file with/without namespace in Java
To parse XML without namespace is pretty staright forward , but we have namespace in XML tags
Ex: <ns2:User>
<ns2:Id>AAAAA</ns2:Id>
<ns2:GivenName>ona</ns2:GivenName>
<ns2:Surname>on3</ns2:Surname>
<ns2:PreferredLanguage>pl-PL</ns2:PreferredLanguage>
<ns2:Location>
<ns2:AddressLine1>Adresss</ns2:AddressLine1>
<ns2:AddressLine2>Adress13</ns2:AddressLine2>
<ns2:AddressLine3>Adress21</ns2:AddressLine3>
<ns2:PostalCode>11-112</ns2:PostalCode>
<ns2:City>new city</ns2:City>
<ns2:CountryCode>CZ</ns2:CountryCode>
</ns2:Location>
</ns2:User>
Then we can use below syntax to parse the XML, this is useful if there is no namespace also.It works in both cases.
String xmlString = "XML";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(xmlString)));
NodeList userList = document.getElementsByTagNameNS("*", "User");
Node nUser = userList.item(0);
// logger.info("UserNode: " + nUser.getNodeName());
if (nUser.getNodeType() == Node.ELEMENT_NODE) {
Element eUser = (Element) nUser;
String userId = eUser.getElementsByTagNameNS("*", "Id").item(0).getTextContent();
String userFName = eUser.getElementsByTagNameNS("*", "GivenName").item(0).getTextContent();
String userLName = eUser.getElementsByTagNameNS("*", "Surname").item(0).getTextContent();
String lang = eUser.getElementsByTagNameNS("*", "PreferredLanguage").item(0).getTextContent();
logger.info("USER ID " + userId + "\nUSER Name " + userFName + userLName + "\nLanguage " + lang);
}
No comments:
Post a Comment