当前位置: 首页 > 面试题库 >

操纵/编辑现有xml文档的最佳Java Xml解析器

孔皓
2023-03-14
问题内容

任务:我有一个使用xml名称空间和xml模式的现有xml文档(UTF-8)。我需要解析到特定元素,将内容(也需要使用xml名称空间前缀)附加到该元素,然后再次写出Document。

哪个是我应该用于此任务的最佳XML解析器库?

我看过以前的线程(Java的最佳XML解析器),但是不确定dom4j或JDOM是否对命名空间/ xmlSchema有用,以及对UTF-8字符的良好支持。

一些解析器似乎是
JDom
Dom4J
XOM
WoodStock 的任务

知道哪个最好吗?:-)我使用JDK 6,并且不希望使用内置的SAX / DOM工具来完成此工作,因为这需要我编写过多的代码。

会有一些执行此任务的示例。


问题答案:

使用JDOM,获取InputStream并将其设为Document:

InputStream inputStream = (InputStream)httpURLConnection.getContent();
DocumentBuilderFactory docbf = DocumentBuilderFactory.newInstance();
docbf.setNamespaceAware(true);
DocumentBuilder docbuilder = docbf.newDocumentBuilder();
Document document = docbuilder.parse(inputStream, baseUrl);

那时,您在Java对象中具有XML。做完了 简单。

您既可以使用文档对象和Java API来遍历它,也可以使用XPath,我发现它很容易(一旦我了解了它)。

构建一个XPath对象,这需要一点时间:

public static XPath buildXPath() {
    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    xpath.setNamespaceContext(new AtomNamespaceContext());
    return xpath;
}


public class AtomNamespaceContext implements NamespaceContext {

    public String getNamespaceURI(String prefix) {
        if (prefix == null)
            throw new NullPointerException("Null prefix");
        else if ("a".equals(prefix))
            return "http://www.w3.org/2005/Atom";
        else if ("app".equals(prefix))
            return "http://www.w3.org/2007/app";
        else if ("os".equals(prefix))
            return "http://a9.com/-/spec/opensearch/1.1/";
        else if ("x".equals(prefix)) 
            return "http://www.w3.org/1999/xhtml";
        else if ("xml".equals(prefix))
            return XMLConstants.XML_NS_URI;
        return XMLConstants.NULL_NS_URI;
    }

    // This method isn't necessary for XPath processing.
    public String getPrefix(String uri) {
        throw new UnsupportedOperationException();
    }

    // This method isn't necessary for XPath processing either.
    public Iterator getPrefixes(String uri) {
        throw new UnsupportedOperationException();
    }
}

然后只需使用它(幸运的是)根本不需要太多时间:

return Integer.parseInt(xpath.evaluate("/a:feed/os:totalResults/text()", document));


 类似资料:
  • 问题内容: 用Java解析多个离散的自定义XML文档的最佳方法是什么? 问题答案: 我将使用Stax解析XML,它既快速又易于使用。我在上一个项目中一直使用它来解析最大24MB的XML文件。java.net上有一个不错的介绍,它告诉您入门所需的一切。

  • 主要内容:Java DOM4J解析器 解析XML文档的步骤,Java DOM4J解析器 解析XML文档的示例Java DOM4J解析器 解析XML文档的步骤 以下是使用 DOM4J Parser 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个 SAXReader。 从文件或流创建文档。 通过调用 document.selectNodes() 使用 XPath 表达式获取所需的节点 提取根元素。 迭代节点列表。 检查属性。 检查子元素。 导入 XML 相关的包 创建一个文档生成器 从

  • 主要内容:Java XPath解析器 解析XML文档的步骤,Java XPath解析器 解析XML文档的示例Java XPath解析器 解析XML文档的步骤 以下是使用 XPath Parser 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个文档生成器。 从文件或流创建文档。 创建一个 Xpath 对象和一个 XPath 路径表达式。 使用XPath.compile()编译 XPath 表达式,并通过XPath.evaluate()评估编译的表达式来获取节点列表。 迭代节点列表。

  • 主要内容:Java StAX解析器 解析XML文档的示例Java StAX解析器 解析XML文档的示例 需要解析的文件input.xml 编写Java StAX解析器 解析XML文档的程序 输出结果为:

  • 主要内容:Java JDOM解析器 解析XML文档的步骤,Java JDOM解析器 解析XML文档的示例Java JDOM解析器 解析XML文档的步骤 以下是使用 JDOM解析器 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个文档生成器。 从文件或流创建文档 提取根元素 检查属性 检查子元素 导入 XML 相关的包 创建一个文档生成器 从文件或流创建文档 提取根元素 检查属性 检查子元素 Java JDOM解析器 解析XML文档的示例 input.xml文件: JDomParser

  • 主要内容:Java SAX解析器 解析XML文档的示例Java SAX解析器 解析XML文档的示例 需要解析的文件input.xml 编写DefaultHandler的事件处理程序 编写核心解析处理类 输出结果为: