問題解析XMLHTMLページを解析して情報を抽出する必要がありますが、予期しない結果が得られています。下記のスクリプトを参照してください。
HTMLPageAsText = "
<TITLE>String 1 i want to get</TITLE>
String 2 i want to get
<H2 id="toc-hId-1618931347" id="toc-hId-1618931347">Possibly also this</H2>
<H2 id="toc-hId--933225614" id="toc-hId--933225614">why i get only this</H2>
";
PageTitle="";
PageBody="";
Parse XML( HTMLPageAsText,
On Element( "title",
End Tag( PageTitle=XML text();show("Found title") )
),
On Element( "body",
End Tag( PageBody=XML text();show("Found body") )
),
);
show(PageTitle,PageBody);
変数PageBodyに理想的に必要なものは次のとおりです。
PageBody="String 2 i want to get
<H2 id="toc-hId-809584721" id="toc-hId-809584721">Possibly also this</H2>
<H2 id="toc-hId--1742572240" id="toc-hId--1742572240">why i get only this</H2>"
またはそれが私が得ることを期待するサブタグを除いてタグの内容を得ることだけが可能であるならば
PageBody="String 2 i want to get"
その代わりに私が得るものは:
PageBody="why i get only this"
何がおかしいのですか?
再:問題解析XMLありがとうございます。
これは今のところ行います。
しかし将来の開発では、XML Body()のように呼ばれるOn Element()に対する追加コマンド(タグとしてのネストされたTAGをテキストとして含む)を返すことは本当に便利でしょう。
HTML対XMLについてのコメントで私はポイントを得ます。Webページがより複雑になる場合は
を
に置き換えて処理するようにしますので、XMLに準拠します。私は、閉じられていないタグを追跡し、それらをXMLの正しいバージョンに置き換えるループを想像することさえできました。しかし、XMLパーサーが警告を出しても、エラーが発生した場合にはWebブラウザが問題のあるHTMLを処理するのと同じように実行を続行するのが素晴らしいでしょう。
最後にドキュメンテーションに関して:私はXMLの構文解析のために文書化は多少最小限であることに同意するので、それを更新している間、XML Attr()のための第二引数も含めてください。現時点でのドキュメンテーションでは0と1の属性しか可能ではないと述べていますが、2つの引数を使用するコードを見つけて(使用して)、2番目の引数は属性が見つからなかった場合に返されるストリングです。
これは現時点では文書化されていない便利な機能だと思います
ありがとう。
再:問題解析XML私が言うことができる限りあなたが文書化されたことがないかもしれない何かを見逃しているだけです:text()。EndTag()に似ています。
HTMLPageAsText = "
<TITLE>one of four</TITLE>
two of four
<H2 id="toc-hId-238095" id="toc-hId-238095">three of four</H2>
<H2 id="toc-hId-1743048430" id="toc-hId-1743048430">four of four</H2>
";
title = "";
body = "";
Parse XML( HTMLPageAsText,
On Element( "title",
End Tag( title = XML Text(); )
),
On Element( "body",
Text( body = body || XML Text(); ),
)
);
show(title,body);
title = "4つのうちの1つ";
body = "4つのうち2つ
4つのうち4つ4つ "
- Text()は新しいテキストスニペットが処理されるたびに実行されます。
- HTMLとXMLは通常同じではありません。あなたの例は有効なXMLでもあるのでうまくいきます。
のような多くのHTMLコマンドは、一致していません。XMLリーダーで使用すると壊れます。
- XMLがもう少し複雑な場合は、ネストレベルも追跡する必要があります。
(やり方に戸惑っているうちに私はあなたの例を書き直しました。これを文書化できるかどうかわかります、ありがとう!)