【问题标题】:Parsing XML file using Xpath in jdk1.4jdk1.4中使用Xpath解析XML文件
【发布时间】:2011-02-23 16:57:22
【问题描述】:

我找到了以下从 XML 文件中提取值的简单解决方案。

import java.io.IOException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.xpath.*;

public class XPathExample {

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

    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true); // never forget this!
    DocumentBuilder builder = domFactory.newDocumentBuilder();
    Document doc = builder.parse("c:/temp/books.xml");

    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    XPathExpression expr 
     = xpath.compile("//book[author='Neal Stephenson']/title/text()");

    Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;
    for (int i = 0; i < nodes.getLength(); i++) {
        System.out.println(nodes.item(i).getNodeValue()); 
    }

  }

}

这使用xpath从以下xml中提取作者为Neal Stephenson的所有书名

<inventory>
<book year="2000">
    <title>Snow Crash</title>
    <author>Neal Stephenson</author>
    <publisher>Spectra</publisher>
    <isbn>0553380958</isbn>
    <price>14.95</price>
</book>

<book year="2005">
    <title>Burning Tower</title>
    <author>Larry Niven</author>
    <author>Jerry Pournelle</author>
    <publisher>Pocket</publisher>
    <isbn>0743416910</isbn>
    <price>5.99</price>
</book>

<book year="1995">
    <title>Zodiac</title>
    <author>Neal Stephenson</author>
    <publisher>Spectra</publisher>
    <isbn>0553573862</isbn>
    <price>7.50</price>
</book>

<!-- more books... -->

</inventory>

现在这在 JDK5 上运行良好,但我使用的是 jdk 1.4 这可以转换为 java 1.4 的等效项吗?

我要做的就是从 xml 元素中提取一个值。例如,在上面的 xml 中,我只想要与 getElementByTag("title") 等效的东西。

谢谢

【问题讨论】:

  • Neal Stephenson +1(我无法抗拒:P)

标签: java xml xpath


【解决方案1】:

快速谷歌搜索到了thisthis 之类的链接,它们确认可以单独下载 JAXP 并在 JDK 1.4.2 之上运行。您可能会遇到 apache 链接中提到的配置问题。祝你好运!

【讨论】:

  • 没有外部下载就不行吗?
  • 对不起,我有点困惑。我以为 JAXP 已经在 1.4 中了。看到这个esus.com/javaindex/j2se/jdk1.2/jaxp/jaxp.html 是 1.4 中的 DOM 解析器不是 JAXP 的一部分吗?
  • JAXP 只是一个接口。您还需要一个实现,JDK 5 中引入了 XPath 实现 javax.xml.xpath。话虽如此,您可以下载 1.4 的实现。
  • 嗨,马克,请参阅文档末尾的jaxp.java.net/1.3/Updating.html#java-14,它说 jdk1.4 中内置了 JAXP 的实现。我不太明白可下载实现和 jdk1.4 中包含的实现的区别,以及为什么我无法访问内置实现
  • 我以为您需要 XPath 支持。我相信 JAXP 从 1.3 开始就提供 Xpath 支持。 Jdk 1.4 中内置的都是 JAXP 1.1,它不支持 Xpath。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
相关资源
最近更新 更多