Java 如何使用xstream读取xml中的注释

Java 如何使用xstream读取xml中的注释,java,comments,xstream,Java,Comments,Xstream,有没有一种方法可以在使用XStream和Java进行解析时读取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 doub

有没有一种方法可以在使用XStream和Java进行解析时读取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具有这样的功能,允许您在DOM树中包含注释,并且您可以区分节点的类型


类似地,C#has

尝试使用API解析来自XML的CData和注释。

据我所知,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) {
    }
  }
}
import org.xml.sax.*;
导入org.xml.sax.ext.*;
导入org.xml.sax.helpers.*;
导入java.io.IOException;
公共类ReadXMLFile实现了LexicalHandler{
public void startDTD(字符串名称、字符串publicId、字符串systemId)
抛出SAX异常{
}
public void endDTD()引发异常{
}
public void startenty(字符串名称)引发异常{
}
公共void属性(字符串名称)引发异常{
}
public void startCDATA()引发异常{
}
public void endCDATA()引发异常{
}
公共无效注释(字符[]文本,整数开始,整数长度)
抛出SAX异常{
System.out.println(“注释:+新字符串(文本、开始、长度));
}
公共静态void main(字符串[]args){
//设置解析器
XMLReader解析器;
试一试{
parser=XMLReaderFactory.createXMLReader();
}捕获(SAXException ex1){
试一试{
parser=XMLReaderFactory.createXMLReader(“org.apache.xerces.parsers.SAXParser”);
}捕获(SAX2异常){
返回;
}
}
试一试{
parser.setProperty(“http://xml.org/sax/properties/lexical-handler,新的ReadXMLFile()
);
}捕获(SAXNotRecognizedException){
System.out.println(e.getMessage());
返回;
}捕获(SAXNotSupportedException e){
System.out.println(e.getMessage());
返回;
}
试一试{
parser.parse(“xmlfile.xml”)//