Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:理解XML DOM解析器代码有困难_Java_Xml_Parsing_Dom - Fatal编程技术网

Java:理解XML DOM解析器代码有困难

Java:理解XML DOM解析器代码有困难,java,xml,parsing,dom,Java,Xml,Parsing,Dom,我不知道为什么,但我在理解XMLDOM解析时遇到了很大困难,我想知道是否有人可以帮助我理解代码。目前我有以下XML文件内容: <environment> <gravity direction="90" magnitude="20"/> <viscosity magnitude="0.8"/> <centermass magnitude="100" exponent="2.0"/> <wall id="1" magnitude=

我不知道为什么,但我在理解XMLDOM解析时遇到了很大困难,我想知道是否有人可以帮助我理解代码。目前我有以下XML文件内容:

<environment>
  <gravity direction="90" magnitude="20"/>
  <viscosity magnitude="0.8"/>
  <centermass magnitude="100" exponent="2.0"/>
  <wall id="1" magnitude="40" exponent="1.5"/>
  <wall id="2" magnitude="50" exponent="2.0"/>
  <wall id="3" magnitude="180" exponent="1.0"/>
  <wall id="4" magnitude="10" exponent="0.0"/>
</environment>
这是我从不同的教程中编译的Java类,但是当我试图从单个节点(如重力、粘度等)中提取值时,我陷入了困境

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import java.io.*;

public class XMLParser{

    public static void main(String[] args) {
        try {

            File environment = new File("environment.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(environment);
            doc.getDocumentElement().normalize();

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

            NodeList nodes = doc.getElementsByTagName("environment");

            for (int i = 0; i < nodes.getLength(); i++) {
                Node node = nodes.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element element = (Element) node;

// I don't think I need to loop through nodes because I only have one environment node, but I've kept it there to deal with general cases. Then node contains the child nodes I would like to extract data from, such as gravity, viscosity, etc, but I'm not sure quite how to do it. 
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

抱歉发了这么长的帖子,谢谢你的帮助

因此,您将在循环中查看的一个节点将是根元素节点。迭代其子节点,它们将是您感兴趣的实际节点。您可以像访问根元素一样执行此操作。此外,您还可以很容易地在谷歌上搜索关于此的教程:


1首先,您正在读取xml文件

2调用DOM解析器,该解析器从与xml相关的元素在memmory结构中创建

3获取根元素

根元素的4个迭代子元素


就这些

哈哈,当你发布这篇文章时,我碰巧也在写类似的东西,谢谢你的参考。我觉得现在有点道理了。下面代码行System.out.printlnStaff id:+EEElement.getAttributeid的一个问题;教程只提取了一个属性。如果我想提取多个属性,我将如何进行呢?我知道有一个方法.getAttributes,但它返回一个NamedNodeMap,并且似乎没有一个选项让我指定有多个元素的元素的名称:相同的事情只是传递您感兴趣的属性的值。ie element.getAttributemagnitudeYES我找到了!很高兴听到。还要感谢的是,您不必从CorelDraw生成通过VB6解析的xml