首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xml解析包括内联解析

Xml解析包括内联解析
EN

Stack Overflow用户
提问于 2012-01-09 04:00:16
回答 2查看 384关注 0票数 0

使用:

代码语言:javascript
复制
 import org.w3c.dom.*;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.DocumentBuilder;

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

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
<request method="POST" url="/devices/test/planner" body="*">

谢谢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-09 10:52:02

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

代码语言:javascript
复制
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());
    }
}

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

输出:

已创建

预订!

/devices/test/planner

票数 2
EN

Stack Overflow用户

发布于 2012-01-09 04:02:59

使用XPath -也可以通过standard Java APIs轻松获得。一旦你有了你的Document,Java的XPath就可以直接对它进行计算-所以你的DocumentBuilder和其他东西仍然会被使用。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8780773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档