3

私はhtmlドキュメントの操作に関するプロジェクトを行っています。既存のhtmlドキュメントの本文コンテンツを新しいhtmlに変更したいのですが、現在はJDOMを使用しています。コーディングでbody要素を使用したい。そのためにコーディングでgetChild( "body")を使用した。しかし、プログラムにnullが返される。しかし、htmlドキュメントにはbody要素が含まれている。私は学生です?

ポインタをいただければ幸いです。

コーディング:

import org.jdom.Document;
import org.jdom.Element;
public static void getBody() {
SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser", true);
org.jdom.Document jdomDocument=builder.build("http://www......com");
Element root = jdomDocument.getRootElement();
      //It returns null
System.out.println(root.getChild("body"));
}

これらも参照してください..コンソールに出力された私のhtmlのルートと子...

root.getName():html

SIZE:2

[Element: <head [Namespace: http://www.w3.org/1999/xhtml]/>]

[Element: <body [Namespace: http://www.w3.org/1999/xhtml]/>]
4

3 に答える 3

9

コードにいくつかの問題が見つかりました:1)ネットを介してリモートxmlをビルドする場合は、入力としてURLを受け取る別のビルドメソッドを使用する必要があります。実際には、xmlとして「www......com」という名前のファイルを解析しています。

Document jdomDocument = builder.build( new URL("http://www........com"));

2)htmlページをxmlとして解析する場合は、それが整形式のxhtmlドキュメントであることを確認する必要があります。そうでない場合は、xmlとして解析できません。

3)別の回答ですでに述べたように、root.getChild("body")名前が「body」であるルートの子を名前空間なしで返します。探している要素の名前空間を確認する必要があります。修飾された名前空間がある場合は、次の方法で渡す必要があります。

root.getChild("body", Namespace.getNamespace("your_namespace_uri"));

どの名前空間に要素があるかを簡単に知るには、getChildrenメソッドを使用してすべてのrootの子を出力する必要があります。

for (Object element : doc.getRootElement().getChildren()) {
    System.out.println(element.toString());
}

xhtmlを解析しようとしている場合は、おそらく名前空間uriがありますhttp://www.w3.org/1999/xhtml。したがって、これを行う必要があります。

root.getChild("body", Namespace.getNamespace("http://www.w3.org/1999/xhtml"));
于 2011-03-10T12:40:10.353 に答える
2

org.ccil.cowan.tagsoup.Parserが必要だと感じる理由は何ですか?JDKに組み込まれているパーサーが提供しないことは何を提供しますか?

SAXBuilder用の別のコンストラクターを使用して試してみます。JDKに組み込まれているパーサーを使用して、それが役立つかどうかを確認してください。

XMLOutputterを使用してツリー全体を印刷することから始めます。

public static void getBody() 
{
    SAXBuilder builder = new SAXBuilder(true);
    Document document = builder.build("http://www......com");
    XMLOutputter outputter = new XMLOutputter();
    outputter.output(document, System.out);  // do something w/ exception
}
于 2011-03-10T12:10:40.440 に答える
1
import org.jdom.Document;
import org.jdom.Element;
public static void getBody() {
SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser", true);
org.jdom.Document jdomDocument=builder.build("http://www......com");
Element root = jdomDocument.getRootElement();
      //It returns null
System.out.println(root.getChild("body", Namespace.getNamespace("my_name_space")));
}
于 2011-03-10T14:26:59.527 に答える