0

結果のいくつかのロジック操作に必要ないくつかのカスタムタグを含む短いhtmlドキュメントを解析するためにJsoupを使用しています

このような:

<table><showif field="xxx"><tr><td>test</test></td></tr></showif><tr><td>xyz</td></tr></table>

Document doc = Jsoup.parse(html);
Elements showif_fields = doc.select("SHOWIF[field]");

この場合、内部コンテンツが失われているように見えますが、outerHtml()メソッドはこれを示しています。

<showif value="xxx"></showif>

ただし、「showif」タグにhelloのような単純なテキストが含まれている場合は、期待どおりに機能します。

何か案は?ありがとうございました。

4

2 に答える 2

2

あなたがぶつかっている問題は、テーブルコンテンツのHTML仕様がかなり厳格であるため、未知のタグがテーブルの外で助長されていることです。(JsoupはこれをHTML仕様に一致させるために実行するため、ブラウザーの動作に可能な限り一致します。)

この場合、何をしていてHTMLを作成しているのかがわかっているので、jsoupを設定してHTML仕様を無視し、タグが表示されたとおりに処理することができます。XMLパーサーでこれを行います:

Document doc = Jsoup.parse(html, baseUri, Parser.xmlParser());
于 2013-02-17T20:03:03.467 に答える
0

問題は、JsoupがHTMLを「サニタイズ」したことです。簡単なテストとして、HTMLをページに貼り付け、ブラウザで表示します(どちらかをサニタイズする傾向があります)。これにより、HTMLは実際には次のようになります。

<showif value="xxx"/>
<table><tbody><tr><td>test</td></tr><tr><td>xyz</td></tr></tbody></table>

これは、の内部で直接許可される要素はごくわずかであり、ブラウザはタグを内部に<table>配置することで間違いを犯したと判断し、これを修正するためです。<showif>Jsoupも似たようなことをしていると思います。

編集:Jsoupを実行しました。実際、私が見ると同様の出力が作成されますdoc.outerHtml()

ページに注釈を付けるために本当に非標準的なものを使用する必要がある場合は、次のような非標準の属性を使用すると幸運が得られる可能性があります。

<table>
  <tr showif="xxx"><td>test</test></td></tr>
  <tr><td>xyz</td></tr>
</table>

次に、次のように言うことができますElements showif_fields = doc.select("*[showif]");。これにより、

<tr showif="xxx">
   <td>test</td>
</tr>

としてshowif_fields.outerHtml()

次に、別のアプローチを使用したほうがよい場合があります。たとえば、jQueryテンプレートやMustache(およびその他の多く)などのjavascriptテンプレートエンジンは、コンテンツをページに読み込んで修正するのではなく、ロジックを実行した後に生成されたHTMLを挿入します。その後。もちろん、これは、この推奨事項が意味をなすかどうかを判断するのに十分な知識がないあなたの要件によって異なります。編集:いいえ、Jsoupはサーバー側であるため、意味がありません。以下のコメントを参照してください。

于 2013-02-10T00:46:54.727 に答える