質問

私はいくつかのXMLを解析しようとしているので、

、の作成は私の管理下にはありません。トラブルは、彼らが何らかの形でこのように見えるのノードを持って、次のとおりです。

<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(MORNINGSTAR) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(QUARTERSTAFF) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(SCYTHE) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(TRATNYR) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(TRIPLE-HEADED_FLAIL) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(WARAXE) />

Visual Studioと.NETの両方の上で使用されるように「(」と「)」文字は、完全に無効であることを感じています。残念ながら、私はこれらのファイルを処理する必要があります!これらの文字を見に陥る、あるいは動的にまたは何かを逃れられないために、XMLリーダークラスを取得する方法はありますか?私は、ファイル全体に前処理のいくつかの並べ替えを行うことができますが、彼らはいくつかの有効な方法でノード内に表示された場合、私は、「(」と「)」文字をしたいですので、私はちょうどそれらをすべて削除する必要はありません。 ..

役に立ちましたか?

解決

これは単に有効ではありません。前処理は、おそらく正規表現で、あなたの最高の賭けである - のようなもの:

string output = Regex.Replace(input, @"(<\w+)\((\w+)\)([ >/])", "$1$2$3");

編集:交換するもう少し複雑な「 - 」カッコ内:

string output = Regex.Replace(input, @"(<\w+)\(([-\w]+)\)([ >/])",
    delegate(Match match) {
        return match.Groups[1].Value + match.Groups[2].Value.Replace('-', '_')
             + match.Groups[3].Value;
    });

他のヒント

それは構文的に有効でない場合は、

、それはXMLではありません。

XMLはこのことについて非常に厳しいです。

あなたは正しいXMLを送信するための送信アプリケーションを得ることができない場合は、ちょうどそれらが下流のプロセスは、これはのそれはあなたまたは一部のかどうか、を失敗します見ているのどんなのことを知ってみましょう将来的には他のアプリます。

前処理ができない場合は、別の巧妙なメカニズムは、カスタムストリームとパーサに渡されStreamオブジェクトをラップすることです。そのストリームは<文字を探して、それが1を見たときに、フラグを設定することができます。 >文字が表示さになるまで、それはどの(または)文字を食べることができます。私たちは、従来の搬送機構により、XMLファイルに追加NULと^ Zの文字を取り除くために、このようなものを使用しました。 (彼らはそこにエスケープする必要はありませんので、のみ、属性の内部<文字があるかもしれない落とし穴 - 。唯一>文字が行う)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top