有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Xml解析包括内联解析

使用:

 import org.w3c.dom.*;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.DocumentBuilder;

如何提取xml数据?例如,对于此xml文件:

<request method="POST" url="/devices/test/planner" body="*">
  <response statusCode="200">
    <header>
      <headerParameters>
        <headerParameter name="Content-Type">Content-Type=application/xml</headerParameter>
      </headerParameters>
    </header>
    <body>booking created!</body>
  </response>
</request>

如何简单地提取数据? 另外,如何从内联行提取数据

<request method="POST" url="/devices/test/planner" body="*">

谢谢


共 (2) 个答案

  1. # 1 楼答案

    我支持使用XPath的建议。您可以手动遍历DOM,但为什么?XPath就是为了解决这个问题而设计的。下面是一个完整的Java/JAXP/XPath示例(sans错误检查和异常处理):

    import java.io.IOException;
    import java.io.StringReader;
    import javax.xml.parsers.*;
    import javax.xml.xpath.*;
    import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    
    public class Xpather {
        public static void main(String[] args) 
                throws XPathExpressionException, ParserConfigurationException, 
                SAXException, IOException {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource("workbook.xml"));
            XPath xpath = XPathFactory.newInstance().newXPath();
            Node body = (Node) xpath.evaluate("/request/response/body", doc,
                    XPathConstants.NODE);
            System.out.println(body.getTextContent());
            Node url = (Node) xpath.evaluate("/request/@url", doc,
                    XPathConstants.NODE);
            System.out.println(url.getNodeValue());
        }
    }
    

    此代码打印body元素的内容和request元素上的url属性的值

    输出:

    booking created!

    /devices/test/planner

  2. # 2 楼答案

    使用XPath-也可以通过standard Java APIs随时获取。一旦有了Document,Java的XPath就可以直接从中求值——因此仍然会使用DocumentBuilder之类的

    例如,您可以使用/request获取<request/>元素,或者使用类似/request/@url的内容获取请求的URL

    另一种方法是使用SAX解析,特别是在高性能使用场景中,您可能会按照相同的模式处理多个文档,在这种情况下,您将为处理的每个XML元素接收一个事件,并给出其名称和属性列表