Wednesday, 11 January 2017

Parsing XML file with/without namespace in Java

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