Создание документа DOM с помощью tagoup - PullRequest
3 голосов
/ 02 ноября 2010

Я не могу заставить работать TagSoup. Я использую код, который следует, но когда я печатаю Node, возвращенный анализатором (строка с System.err.println (doc);), я всегда получаю «[#document: null]».

Я не знаю, как найти ошибку в этом коде или, в зависимости от того, где она возникла. Пожалуйста, помогите!

public final Document parseDOM(final File fileToParse) {
  Parser p = new Parser();
  SAX2DOM sax2dom = null;
  org.w3c.dom.Node doc  = null;

  try { 

        URL url = new URL("http://stackoverflow.com/");
        p.setFeature(Parser.namespacesFeature, false);
        p.setFeature(Parser.namespacePrefixesFeature, false);
        sax2dom = new SAX2DOM();
        p.setContentHandler(sax2dom);
        p.parse(new InputSource(new InputStreamReader(url.openStream())));
        doc = sax2dom.getDOM();
        System.err.println(doc);
  } catch (Exception e) {
     // TODO handle exception
     e.printStackTrace();
  }


  return doc.getOwnerDocument();
 }

Ответы [ 2 ]

3 голосов
/ 02 ноября 2010

Из документации на getOwnerDocument:

Если этот узел является Document или DocumentType, который еще не используется с каким-либо документом, это значение равно нулю.

Поскольку getDOM в вашем случае должно возвращать Document, вы можете просто привести возвращаемое значение или изменить тип doc на Document.

1 голос
/ 02 ноября 2010

Ваш парсер работает, но вы просто не можете распечатать такой узел.Самый простой способ распечатать узел и все его дочерние элементы - использовать XML-сериализатор следующим образом:

          Writer out = new StringWriter();
          XMLSerializer serializer = new XMLSerializer(out, new OutputFormat());
          serializer.serialize(doc);
          System.out.println(out.toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...