有 Java 编程相关的问题?

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

java如何加载组织。w3c。多姆。以字符串形式从XML创建文档?

我有一个字符串形式的完整XML文档,想要一个Document对象。谷歌发现了各种各样的垃圾。最简单的解决方案是什么?(在Java 1.5中)

解决方案多亏了Matt McMinn,我已经确定了这个实现。对我来说,它具有适当级别的输入灵活性和异常粒度。(最好知道错误是来自格式错误的XML-SAXException还是仅仅是错误的IO-IOException。)

public static org.w3c.dom.Document loadXMLFrom(String xml)
    throws org.xml.sax.SAXException, java.io.IOException {
    return loadXMLFrom(new java.io.ByteArrayInputStream(xml.getBytes()));
}

public static org.w3c.dom.Document loadXMLFrom(java.io.InputStream is) 
    throws org.xml.sax.SAXException, java.io.IOException {
    javax.xml.parsers.DocumentBuilderFactory factory =
        javax.xml.parsers.DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    javax.xml.parsers.DocumentBuilder builder = null;
    try {
        builder = factory.newDocumentBuilder();
    }
    catch (javax.xml.parsers.ParserConfigurationException ex) {
    }  
    org.w3c.dom.Document doc = builder.parse(is);
    is.close();
    return doc;
}

共 (2) 个答案

  1. # 1 楼答案

    为了在Java中操作XML,我总是倾向于使用Transformer API:

    import javax.xml.transform.Source;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMResult;
    import javax.xml.transform.stream.StreamSource;
    
    public static Document loadXMLFrom(String xml) throws TransformerException {
        Source source = new StreamSource(new StringReader(xml));
        DOMResult result = new DOMResult();
        TransformerFactory.newInstance().newTransformer().transform(source , result);
        return (Document) result.getNode();
    }   
    
  2. # 2 楼答案

    这在Java 1.5中对我很有用——为了可读性,我去掉了特定的异常

    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.DocumentBuilder;
    import org.w3c.dom.Document;
    import java.io.ByteArrayInputStream;
    
    public Document loadXMLFromString(String xml) throws Exception
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    
        factory.setNamespaceAware(true);
        DocumentBuilder builder = factory.newDocumentBuilder();
    
        return builder.parse(new ByteArrayInputStream(xml.getBytes()));
    }