2012-10-30 48 views
1

有沒有辦法在使用XStream和Java解析xml註釋的同時讀取它。如何使用xstream在xml中讀取註釋

<!-- 
Mesh: three-dimensional box 100m x 50m x 50m Created By Sumit Purohit on 
for a stackoverflow query. 
--> 
<ParameterList name="Mesh"> 
<Parameter name="Domain Low Corner" type="Array double" value="{0.0, 0.0, 0.0}" /> 
<Parameter name="Domain High Corner" type="Array double" value="{100.0, 50.0,50.0}" /> 
</ParameterList> 

我目前使用XStream序列/反序列化XML種以上。我需要將註釋保存爲我的POJO中的註釋,以便我可以在UI中顯示它。

我在XStream中找不到任何東西。

DOM有DocumentBuilderFactory.setIgnoringComments(boolean)可讓您在DOM樹中包含註釋,並且可以區分節點類型。

同樣C#有XmlReaderSettings.IgnoreComments

回答

1

據我所知,XStream無法處理XML註釋。

下面是另一種方法,它使用LexicalHandler API:

import org.xml.sax.*; 
import org.xml.sax.ext.*; 
import org.xml.sax.helpers.*; 

import java.io.IOException; 

public class ReadXMLFile implements LexicalHandler { 

    public void startDTD(String name, String publicId, String systemId) 
     throws SAXException { 
    } 

    public void endDTD() throws SAXException { 
    } 

    public void startEntity(String name) throws SAXException { 
    } 

    public void endEntity(String name) throws SAXException { 
    } 

    public void startCDATA() throws SAXException { 
    } 

    public void endCDATA() throws SAXException { 
    } 

    public void comment(char[] text, int start, int length) 
     throws SAXException { 

    System.out.println("Comment: " + new String(text, start, length)); 
    } 

    public static void main(String[] args) { 
    // set up the parser 
    XMLReader parser; 
    try { 
     parser = XMLReaderFactory.createXMLReader(); 
    } catch (SAXException ex1) { 
     try { 
     parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); 
     } catch (SAXException ex2) { 
     return; 
     } 
    } 

    try { 
     parser.setProperty("http://xml.org/sax/properties/lexical-handler",new ReadXMLFile() 
    ); 
    } catch (SAXNotRecognizedException e) { 
     System.out.println(e.getMessage()); 
     return; 
    } catch (SAXNotSupportedException e) { 
     System.out.println(e.getMessage()); 
     return; 
    } 

    try { 
     parser.parse("xmlfile.xml"); // <---- Path to XML file 
    } catch (SAXParseException e) { // well-formedness error 
     System.out.println(e.getMessage()); 
    } catch (SAXException e) { 
     System.out.println(e.getMessage()); 
    } catch (IOException e) { 
    } 
    } 
} 
相關問題