如何使用domapi在Java中解析这个xml?

如何使用domapi在Java中解析这个xml?,java,xml,parsing,dom,Java,Xml,Parsing,Dom,我正试图解析一个xml文件,只想获得某些信息 ... <field name="firstname"> <value>John</value> </field> <field name="lastname"> <value>Citizen</value> </field> <field name="DoB"> <value>01/01/1980</

我正试图解析一个xml文件,只想获得某些信息

...
<field name="firstname">
    <value>John</value>
</field>
<field name="lastname">
    <value>Citizen</value>
</field>
<field name="DoB">
    <value>01/01/1980</value>
</field>
<field name="Profession">
    <value>"Manager"</value>
</field>
....
。。。
约翰
公民
01/01/1980
“经理”
....
我有文档,现在我可以通过循环标签的节点列表打印出所有的值,但是,我不知道如何获得具体的值,例如,我只想要列表中的姓氏和职业,所以我的目标是拥有:“公民”和“经理”

有什么线索吗

谢谢

试试这个。。。。。。
Try This......


package com.mkyong.seo;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;

public class ReadXMLFile {

  public static void main(String argv[]) {

    try {

    File fXmlFile = new File("/Users/mkyong/staff.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);

    //optional, but recommended
    //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
    doc.getDocumentElement().normalize();

    System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

    NodeList nList = doc.getElementsByTagName("staff");

    System.out.println("----------------------------");

    for (int temp = 0; temp < nList.getLength(); temp++) {

        Node nNode = nList.item(temp);

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

        if (nNode.getNodeType() == Node.ELEMENT_NODE) {

            Element eElement = (Element) nNode;

            System.out.println("Staff id : " + eElement.getAttribute("id"));
            System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
            System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
            System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
            System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());

        }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
  }

}




For More Reference: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
包com.mkyong.seo; 导入javax.xml.parsers.DocumentBuilderFactory; 导入javax.xml.parsers.DocumentBuilder; 导入org.w3c.dom.Document; 导入org.w3c.dom.NodeList; 导入org.w3c.dom.Node; 导入org.w3c.dom.Element; 导入java.io.File; 公共类ReadXMLFile{ 公共静态void main(字符串argv[]){ 试一试{ File fXmlFile=新文件(“/Users/mkyong/staff.xml”); DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder=dbFactory.newDocumentBuilder(); documentdoc=dBuilder.parse(fXmlFile); //可选,但推荐 //请阅读以下内容-http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work doc.getDocumentElement().normalize(); System.out.println(“根元素:+doc.getDocumentElement().getNodeName()); NodeList nList=doc.getElementsByTagName(“staff”); System.out.println(“-------------------------------”; 对于(int-temp=0;temp
尝试使用DOM API(稍微使用一下文档、元素和节点的方法),您将能够非常快速地处理XML

在下面的示例中,我将XML作为字符串加载,提取节点并将它们放置在地图中。您可以将其作为编写代码的起点。我刚刚在XML中添加了一个
,以便将代码放在一个工作示例中

public class DOMExampleStackOverflow3 {

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

        InputSource source = new InputSource(new StringReader("<root>\n" +
                                                            "<field name=\"firstname\">\n" +
                                                            "    <value>John</value>\n" +
                                                            "</field>\n" +
                                                            "<field name=\"lastname\">\n" +
                                                            "    <value>Citizen</value>\n" +
                                                            "</field>\n" +
                                                            "<field name=\"DoB\">\n" +
                                                            "    <value>01/01/1980</value>\n" +
                                                            "</field>\n" +
                                                            "<field name=\"Profession\">\n" +
                                                            "    <value>Manager</value>\n" +
                                                            "</field>\n" +
                                                            "</root>" ));

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = factory.newDocumentBuilder();
        Document document = documentBuilder.parse(source);

        NodeList allFields = (NodeList) document.getElementsByTagName("field");

        Map<String, String> data = new HashMap<>();
        for(int i = 0; i < allFields.getLength(); i++) {
            Element field = (Element)allFields.item(i);
            String nameAttribute = field.getAttribute("name");
            Element child = (Element)field.getElementsByTagName("value").item(0);
            String value = child.getTextContent();
            data.put(nameAttribute, value);
        }

        for(Map.Entry field : data.entrySet()) {
            System.out.println(field.getKey() + ": " + field.getValue());
        }
    }
}

现在,您可以更改代码并在条件块提取中使用属性信息,这正是您所需要的。

您可以使用XPath。下面是一个示例,使用:


你在找DOM教程吗?我确信有一些是在线的。是的,你可以肯定有一些,我也经历过一些,但大多数都是在玩没有属性的标签,例如,上面的例子中的名称你可以通过递归来尝试-我的一个详细例子我已经看过了,但是在你有了节点列表之后,如何区分标记,我需要检查标记是否具有属性name=“Profession”eElement.getElementsByTagName(“field”).item(0).getnodeName(),它将返回您的字段名,然后您可以设置if条件,对于您想要的名称,例如if(eElement.getElementsByTagName(“field”).item(0).getnodeName().equals(“Profession”))这里不鼓励从其他站点复制和粘贴代码。
firstname: John
Profession: Manager
DoB: 01/01/1980
lastname: Citizen
XmlDocument doc = Xsylum.documentFor(xml);
String lastName = doc.value("//field[@name='lastname']/value/text()");
String profession = doc.value("//field[@name='Profession']/value/text()");