【问题标题】:Get element with xml dom parser [closed]使用 xml dom 解析器获取元素 [关闭]
【发布时间】:2015-11-28 23:42:30
【问题描述】:

如何仅使用 xml DOM 解析器在 jbeil 中获取餐厅名称,请帮助: 这是我的 XML 文件

 <city>

 <beirut>
     <restaurant>
       <name>sada</name>
     </restaurant>
</beirut>

<jbeil>
     <restaurant>
       <name>sada</name>
     </restaurant>
</jbeil>

 <sour>     
     <restaurant>
       <name>sada</name>
     </restaurant>
 </sour>

 </city>

我想使用 dom 解析器获取 Jbeil 中餐厅的名称,这段代码给了我所有城市的餐厅名称:

 try {  
     File inputFile = new File("src/josephXml.xml");
     DocumentBuilderFactory dbFactory 
        = DocumentBuilderFactory.newInstance();
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
     Document doc = dBuilder.parse(inputFile);
     doc.getDocumentElement().normalize();


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

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


       if (nNode.getNodeType() == Node.ELEMENT_NODE) {
           Element eElement = (Element) nNode; 


            jTextArea1.append( "\n"+"Name      :   "+ eElement
              .getElementsByTagName("name")
              .item(0)
              .getTextContent()+"\n "

【问题讨论】:

  • NodeList nList = doc.getElementsByTagName("Restaurant");
  • 你会怎么看 NodeList nList = doc.getElementsByTagName("restaurant");.... 有一个小而显着的差异 R --> r,其余的似乎都很好,所以这只是一个错字
  • 不,我试过餐厅,它有效,但给了我所有城市的所有餐厅,我只想要 jbeil 的餐厅,使用 dom
  • 你为什么不先得到那个标签,然后再从那个得到餐厅标签?

标签: java xml parsing dom


【解决方案1】:

使用 XPath

很多资源:http://viralpatel.net/blogs/java-xml-xpath-tutorial-parse-xml/

类似的东西(未测试)

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;

XPath xPath =  XPathFactory.newInstance().newXPath();
String expression = "/city/jbeil/restaurant/name";
//read a string value
String thename= xPath.compile(expression).evaluate(xmlDocument);

【讨论】:

  • XPath 离 DOM 不远。有了数据的直接路径,为什么不使用专门为此而制作的库呢?使用原始代码,您可以获得所有餐厅,并且必须循环/for,测试 ...
  • +1 是的,我同意 XPath 更好(首先我相信他只是在餐厅打错字)然后我看到他确实需要跳过节点......
【解决方案2】:

使用与您相同的代码样式并“仅使用 xml DOM 解析器”获取 jbeil,然后是 restaurant...

    NodeList nList = doc.getElementsByTagName("jbeil");
    for (int i = 0; i < nList.getLength(); i++) {
        Node nNode = nList.item(i);
        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
            Element eElement = (Element) nNode;
            NodeList nList2 = eElement.getElementsByTagName("restaurant");
            for (int n = 0; n < nList.getLength(); n++) {
                Node nNode2 = nList2.item(n);
                if (nNode2.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement2 = (Element) nNode;
                    System.out.println(eElement2.getElementsByTagName("name").item(0).getTextContent());
                }
            }
        }
    }

但我会选择 XPath 答案...

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 2012-04-14
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多