【问题标题】:How to convert String to DOM Document object in java?如何在java中将String转换为DOM Document对象?
【发布时间】:2012-01-19 01:45:05
【问题描述】:

我有一个案例,比如获取一个 XML 并将 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 编码器和解码器来处理这种情况??

【问题讨论】:

  • 属性应该没问题 - 你看到了什么行为?

标签: java xml dom


【解决方案1】:

你可以试试

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader("<root><node1></node1></root>"));

Document doc = db.parse(is);

参考这个http://www.java2s.com/Code/Java/XML/ParseanXMLstringUsingDOMandaStringReader.htm

【讨论】:

  • 没关系!!但是如果我们有一个像上面这样的属性和值呢??
【解决方案2】:

\转义双引号

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

或者用单引号代替

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

【讨论】:

    【解决方案3】:
    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 有效,注意转义字符应在前面添加“\”。

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

    【讨论】:

      【解决方案4】:
           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();  
              } 
        }
      

      【讨论】:

        猜你喜欢
        • 2015-08-30
        • 1970-01-01
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 2017-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多