2

XML ドキュメントを含む文字列から XML 宣言を削除しようとするのを手伝ってくれる人がいるかどうか疑問に思っています。どんな助けでも大歓迎です。私たちは MSXML 4.0 を使用していますが、それを使用するのが難しく、部分文字列を作成するだけで済みました。私は ATL やその他の Microsoft SDK にあまり詳しくありません。それは機能しますが、私の一部が内部で死んでしまったので、これをより壊れにくい方法で行うことを好みます.

編集:現在、改行文字の最初の出現時に部分文字列を実行しています。XML 宣言の "?>" でトークン化または部分文字列を作成しようとしましたが、(wcstok と部分文字列を使用して) 文字の一致を取得する際に問題が発生しています。「\?>」、「\?>」、「?>」を試してみました。理想的な解決策は、ドキュメントを XMLDocument オブジェクトにロードし、メッセージ本文のテキストを取得することです。

4

1 に答える 1

0

XML仕様、特に:の文法を調べてprologください。

[22]プロローグ::=XMLDecl?その他*(doctypedeclその他*)?

[23] XMLDecl :: ='<?xml' VersionInfo EncodingDecl?SDDecl?S?'?>'

したがって、ハンドスパンコードは、XML宣言タグの開始トークンと終了トークンとともに解析できる必要がありますVersionInfo。これらの個々のアイテムの詳細については、仕様を参照してください。EncodingDeclSDDecl

ただし、私の提案は、適切なジョブに適切なツールを使用することです。XMLツールキット/パーサーを使用します。(パーサーとツールキットの違いは、主に、ツールキットがDTD検証、名前空間処理、XPathなどの高度な操作をサポートすることです)。

MSXML4はかなり古いです。MSXML6が最新です。ただし、MSXML6は、小さなXMLファイル以外にはまったく役に立ちません。したがって、入力ファイルのサイズに応じてパーサーを選択します(パフォーマンスが重要な場合)。Xerces、RapidXML、pugixmlなど、パフォーマンスがはるかに優れたライブラリが無料で利用できます。

また、MSXML4で直面した問題を特定できますか?

于 2012-06-11T22:06:18.513 に答える