Как преобразовать String в объект DOM Document в Java? - PullRequest
18 голосов
/ 13 декабря 2011

У меня есть такой случай, как получение 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>"

мы используем двойные кавычки для значений атрибутов "».Компилятор показывает ошибку

Подскажите, есть ли какой-нибудь xml-кодер и декодер для обработки этого сценария ??

Ответы [ 4 ]

46 голосов
/ 13 декабря 2011

Вы можете попробовать

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

6 голосов
/ 13 декабря 2011

Либо избегайте двойных кавычек с \

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

, либо используйте одинарные кавычки

String xmlString = "<element attribname='value' attribname1='value1'> pcdata</element>"
2 голосов
/ 30 июня 2017
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, обратите внимание, что в начале должен быть добавлен escape-символ "\".

Основная проблема не в атрибутах.

2 голосов
/ 30 июля 2015
     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();  
        } 
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...