Разобрать этот XML-файл в Java

Как разобрать этот XML-файл в Java, чтобы прочитать все атрибуты этого XML-файла в Java?

<?xml version="1.0"  encoding="UTF-8"?
<dsml:batchRequest xmlns:dsml="urn:oasis:names:tc:DSML:2:0:core"                  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-   instance">


    <dsml:addRequest  dn="cn=stifford,ou=Users,o=data">

  <attr name="objectclass"><value>top</value></attr>
  <attr name="objectclass"><value>person</value></attr>
  <attr name="objectclass"><value>organizationalPerson</value></attr>
  <attr name="objectclass"><value>inetorgperson</value></attr>
  <attr name="UID"><value>kevin985</value></attr>
  <attr name="sn"><value>kevin</value></attr>
  <attr name="givenName"><value>stifford</value></attr>
   <attr name="telephoneNumber"><value>9852898994</value></attr>
  <attr name="mail"><value>sample@bsample.com</value></attr>

3 ответа

public static void main(String[] args) throws MarshalException,
ValidationException, ParserConfigurationException, SAXException,
IOException {

    File fXmlFile = new File(
            "/home/Parsing/src/com/parsing/test.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);

    doc.getDocumentElement().normalize();

    Node node = doc.getDocumentElement().getParentNode();

    System.out.println(doc.getDocumentElement().getNodeName());

    NodeList itemList = node.getChildNodes();
    for (int i = 0; i < itemList.getLength(); i++) {

        Node nNode = itemList.item(i);

        System.out.println("Current Element : " + nNode.getNodeName());

        getChildNode(nNode.getChildNodes());

    }
}

private static void getChildNode(NodeList childNodes) {   // This method is going to retrieve the child nodes
    // TODO Auto-generated method stub
    System.out.println(childNodes.getLength());

    for (int i = 1; i < childNodes.getLength(); i++) {
        Node cNode = childNodes.item(i);

        System.out.println(cNode.getNodeName());
        /**
         * This will get the attribute of the node 
         */
        if (cNode.hasAttributes()) {

            NamedNodeMap nodeMap = cNode.getAttributes();
            for (int f = 0; f < nodeMap.getLength(); f++) {
                System.out.println("Att " + nodeMap.item(f).getNodeName()
                        + " " + nodeMap.item(f).getNodeValue());
            }
        }

        if (cNode.hasChildNodes()) {

            // For getting the value if node has more than 2 or atleast two childs

            if (cNode.getChildNodes().getLength() >= 2) {

                getChildNode(cNode.getChildNodes());
            }

            // For getting the node has no childs and it contains text node value

            else if (cNode.getNodeType() == cNode.ELEMENT_NODE) {

                Element ele = (Element) cNode;
                System.out.println("\t" + ele.getTextContent());

            }
        }

        i++;
    }
}

Ответ специфичен для типа парсера. Если вы собираетесь использовать парсер DOM, возможно, это будет полезно. Это примеры парсера SAX.

Одним из способов было бы сделать это вручную, оценивая строки. Другой вариант - использовать одну из всех доступных библиотек Java XML... http://en.wikipedia.org/wiki/Java_API_for_XML_Processing

Другие вопросы по тегам