0

こんにちは私のコードでは、次の行を実行しますが、このコードは実行中にクラッシュします。

ByteArrayInputStream input = new ByteArrayInputStream(fileContent);

final HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();

DomSerializer doms = new DomSerializer(props, true);

org.w3c.dom.Document xmlDoc = null;

try {
    TagNode node = cleaner.clean(input);
    xmlDoc = doms.createDOM(node);
} catch (Exception e) {
    System.out.println("Tiding error ");
    e.printStackTrace();
}

これはエラーのスタック トレースです。

NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
    at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.checkDOMNSErr(CoreDocumentImpl.java:2535)
    at com.sun.org.apache.xerces.internal.dom.AttrNSImpl.setName(AttrNSImpl.java:113)
    at com.sun.org.apache.xerces.internal.dom.AttrNSImpl.<init>(AttrNSImpl.java:74)
    at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.createAttributeNS(CoreDocumentImpl.java:2138)
    at com.sun.org.apache.xerces.internal.dom.ElementImpl.setAttributeNS(ElementImpl.java:656)
    at org.htmlcleaner.DomSerializer.setAttributes(DomSerializer.java:97)
    at org.htmlcleaner.DomSerializer.createDOM(DomSerializer.java:37)

なぜそれが起こっているのかを知るのを手伝ってくれる人はいますか?

敬具、ゾリ

4

1 に答える 1

0

HTMLCleaner で名前空間の処理に問題が発生しました。問題を引き起こす XML 名前空間宣言の例を次に示します。

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"
  xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" 
  itemscope itemtype="http://schema.org/CreativeWork">

ご覧のとおり、itemscope 属性が壊れているため、HtmlCleaner は NAME_SPACE_ERR をスローします。

この問題を回避する 1 つの方法は、次の行を追加することです。

props.setNamespacesAware(false);

名前空間の処理をオフにします。

于 2013-03-11T01:26:42.647 に答える