【问题标题】:How to convert XML (String) to a valid document?如何将 XML(字符串)转换为有效文档?
【发布时间】:2013-05-30 22:16:10
【问题描述】:

我将 XML 作为字符串,我想将其转换为 DOM 文档以便使用 XPath 对其进行解析,我使用此代码将一个字符串元素转换为 DOM 元素:

public Element convert(String xml) throws ParserConfigurationException, SAXException, IOException{

        Element sXml =  DocumentBuilderFactory
                .newInstance()
                .newDocumentBuilder()
                .parse(new ByteArrayInputStream(xml.getBytes()))
                .getDocumentElement();


        return  sXml;

    } 

但是如果我想转换整个 XML 文件呢?我尝试了转换,但它不起作用,因为您无法从 Element 转换为 Document(抛出异常):

例外:

Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredElementImpl cannot be cast to org.w3c.dom.Document

守则:

public Document convert(String xml) throws ParserConfigurationException, SAXException, IOException{

        Element sXml =  DocumentBuilderFactory
                .newInstance()
                .newDocumentBuilder()
                .parse(new ByteArrayInputStream(xml.getBytes()))
                .getDocumentElement();


        return (Document) sXml;

    } 

我也试过了,但没用:

public Document convert(String xml) throws ParserConfigurationException, SAXException, IOException{

        Document sXml =  DocumentBuilderFactory
                .newInstance()
                .newDocumentBuilder()
                .parse(new ByteArrayInputStream(xml.getBytes()));


        return  sXml;

    } 

我能做些什么来解决这个问题?如果 XPath 中有一种方法可以解析字符串而不是文档,那也可以。

【问题讨论】:

  • -1:“没用”可能是您可以在问题中发布的最无用的内容。 什么没用?是不是编译失败了?如果是,请将 整个 编译输出粘贴到您的问题中。它抛出异常了吗?如果是,请将 整个 堆栈跟踪粘贴到您的问题中。它做了别的什么吗?如果是,请描述您的预期以及结果与预期有何不同。
  • 抛出异常(无法从元素转换为文档)
  • 你读过@kdgregory 写的什么吗? 它抛出异常了吗?如果是,请将整个堆栈跟踪粘贴到您的问题中
  • 编辑并抛出异常

标签: java exception xpath document domxpath


【解决方案1】:

也许通过使用这个

public static Document stringToDocument(final String xmlSource)   
    throws SAXException, ParserConfigurationException, IOException {  
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
    DocumentBuilder builder = factory.newDocumentBuilder();  

    return builder.parse(new InputSource(new StringReader(xmlSource)));  
}  

【讨论】:

  • 记得在String的开头有
  • 不,我之前尝试过,但它只是将字符串解析为文档,但结果文档不是 XML 文档
  • @MuhammedRefaat 首先您说我想将其转换为DOM 文档 然后,该文档怎么不是xml?这是什么意思?您要求一种将字符串中的 xml 转换为 w3.Document 的方法,这就是我给您的。这甚至是我自己使用的代码
  • @fGo - 文档序言不是必需的,实际上可能会导致问题,具体取决于解析器如何处理InputSource。但是 +1 表示试图提供帮助;这段代码看起来像 OP 应该使用的。
  • @fGo 我的意思是“结果”文档不是 XML。就像如果你有一个字符串“4”,实际上它是一个整数,但编译器会将它作为一个字符串读取,我想要一种方法让编译器将我的 XML 作为文档读取(我有一个有效的 XML,但它的形状为字符串)。
猜你喜欢
  • 1970-01-01
  • 2017-12-02
  • 2022-08-04
  • 2010-11-20
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 2014-03-12
相关资源
最近更新 更多