Android の XmlPullParsers を使用した無効なアンパサンドの解析
-
20-09-2019 - |
質問
私は、XHTML を使用する小さな画面スクレイピング アプリを作成しています。言うまでもなく、XHTML は無効です。アンパサンドはエスケープされません &
.
私はAndroidを使用しています XmlPullParser
そして、間違ってエンコードされた値に対して次のエラーが出力されます。
org.xmlpull.v1.XmlPullParserException: unterminated entity ref
(position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'>
@55:134 in java.io.InputStreamReader@43b1ef70)
これを回避するにはどうすればよいですか?私は次の解決策を考えました。
- ラッピング
InputStream
アンパサンドをエンティティ参照に置き換える別の例では - 間違ったマークアップを魔法のように受け入れるようにパーサーを構成する
どちらがより成功する可能性が高いでしょうか?
解決
私はあなたの最初の選択肢となるだろう、アンパサンドを交換すると、他のよりフィットソリューションのより多くのようです。 2番目のオプションは、それは正しくないマークアップを受け入れることによって動作させるために、のハックのより多くのだ。
他のヒント
私は、私の場合には、それは「&」それはXMLのPULLパーサーによって解決することができなかったことを考え出す前に約時間のためにこれに引っかかったので、私は解決策を見つけました。だから、ここでは完全にそれを修正するコードのスニペットです。
void ParsingActivity(String r) {
try {
parserCreator = XmlPullParserFactory.newInstance();
parser = parserCreator.newPullParser();
// Here we give our file object in the form of a stream to the
// parser.
parser.setInput(new StringReader(r.replaceAll("&", "&")));
// as a SAX parser this will raise events/callback as and when it
// comes to a element.
int parserEvent = parser.getEventType();
// we go thru a loop of all elements in the xml till we have
// reached END of document.
while (parserEvent != XmlPullParser.END_DOCUMENT) {
switch (parserEvent) {
// if u have reached start of a tag
case XmlPullParser.START_TAG:
// get the name of the tag
String tag = parser.getName();
はかなり私はURLを解析を扱ったので、私はちょうど&
で&
を交換してるやって。
この情報がお役に立てば幸いです。
所属していません StackOverflow