如何在java中将String转换为DOM Document对象?

Pra*_*raj 19 java xml dom

我有一个案例,比如获取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);
Run Code Online (Sandbox Code Playgroud)

但是这种情况仅适用于没有属性的元素,如果有的话我们可以做什么

String xmlString = "<element attribname="value" attribname1="value1"> pcdata</element>"
Run Code Online (Sandbox Code Playgroud)

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

建议我是否有任何xml编码器和解码器来处理这种情况?

Hem*_*lia 48

你可以试试

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

Document doc = db.parse(is);
Run Code Online (Sandbox Code Playgroud)

请参阅http://www.java2s.com/Code/Java/XML/ParseanXMLstringUsingDOMandaStringReader.htm


art*_*tol 6

要么用双引号来逃避 \

String xmlString = "<element attribname=\"value\" attribname1=\"value1\"> pcdata</element>"
Run Code Online (Sandbox Code Playgroud)

或者使用单引号代替

String xmlString = "<element attribname='value' attribname1='value1'> pcdata</element>"
Run Code Online (Sandbox Code Playgroud)


OOD*_*all 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.
Run Code Online (Sandbox Code Playgroud)

尽管 XML 结构很复杂,但这对我来说效果很好。

并且请确保您的 xmlString 对于 XML 有效,注意转义字符应在前面添加“\”。

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