如何在Java中将字符串转换为DOM文档对象?

32

我有一个需求,需要获取一个 XML ,将其元素转换为文档对象,然后获取已创建的元素值和属性。

以下是我尝试将字符串转换为 DOM 文档对象的代码片段。

String xmlString = " <r><e>d</e></r>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
org.w3c.dom.Document document = builder.parse(new InputSource(new StringReader(xmlString)));    
TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result =  new StreamResult(new StringWriter());
transformer.transform(source, result);
String str1 = result.getWriter().toString();
System.out.println(str1);
但这种情况仅适用于没有属性的元素。如果

标签出现在带有属性的元素中,我们该怎么办?
String xmlString = "<element attribname="value" attribname1="value1"> pcdata</element>"

我们正在使用双引号作为属性值"value"。编译器显示错误。

如果有任何可以处理这种情况的XML编码器和解码器,请提供建议。


属性应该没问题 - 你看到了什么行为? - Jon Skeet
4个回答

62

没问题!但如果我们有一个像上面那样的属性和值呢? - Pradeepraj

6
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = db.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8"))); //remove the parameter UTF-8 if you don't want to specify the Encoding type.

即使XML结构很复杂,这对我来说也运作良好。

请确保您的xmlString符合XML的有效性要求,注意需要在前面添加转义字符“\”。

主要问题可能不是来自属性。


6

要么使用 \ 转义双引号

String xmlString = "<element attribname=\"value\" attribname1=\"value1\"> pcdata</element>"

或者使用单引号代替。
String xmlString = "<element attribname='value' attribname1='value1'> pcdata</element>"

3
     public static void main(String[] args) {
    final String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"+
                            "<Emp id=\"1\"><name>Pankaj</name><age>25</age>\n"+
                            "<role>Developer</role><gen>Male</gen></Emp>";
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
        DocumentBuilder builder;  
        try 
        {  
            builder = factory.newDocumentBuilder();  
            Document doc = builder.parse( new InputSource( new StringReader( xmlStr )) ); 

        } catch (Exception e) {  
            e.printStackTrace();  
        } 
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接