1

Java で 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 の種類をシリアル化/逆シリアル化しています。UI に表示できるように、コメントを POJO の注釈として保存する必要があります。

そのためのXStreamには何も見つかりませんでした。

DOM にはDocumentBuilderFactory.setIgnoringComments(boolean)があり、DOM ツリーにコメントを含めることができ、ノードのタイプを区別できます。

同様に、C# にはXmlReaderSettings.IgnoreCommentsがあります

4

2 に答える 2

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) {
    }
  }
}
于 2012-10-30T22:12:22.573 に答える
1

LexicalHandler API を使用して、XML から CData とコメントを解析してみてください。

于 2012-10-30T21:49:37.047 に答える