私はこのような文字列を持っています
"<root><text>My test is > & < </text></root>"
実際には、これは正しい xml ですが、&、<、> 記号は除きます。
<root><text>My test is > & < </text></root>
XElement.Parse(str); で変換する前に、変換する必要があります。
この変換を行う方法は?
私はこのような文字列を持っています
"<root><text>My test is > & < </text></root>"
実際には、これは正しい xml ですが、&、<、> 記号は除きます。
<root><text>My test is > & < </text></root>
XElement.Parse(str); で変換する前に、変換する必要があります。
この変換を行う方法は?
new XElement
次の代わりに使用すると、XElement はテキストを自動的にエスケープしますXElement.Parse()
。
LINQPad スニペット:
var str = "<root><text>My test is > & < </text></root>";
var element = new XElement("element", str);
element.Dump();
出力:
<element><root><text>My test is > & < </text></root></element>
編集:私は質問を読み直しましたが、これが目的の出力を生成しないことに気付きました。
問題は、着信 XML 文字列が根本的に無効であることです。ソースを制御できる場合は、そこで修正する必要があります。そうでない場合、それを修正する簡単な方法はありません。
これを確実に達成することはほぼ不可能です。この問題はソースで修正する必要があります。"My test is > & < " 文字列を挿入するシステムを制御する場合は、挿入する前にこの文字列をエスケープする必要があります。HttpUtility.HtmlEncode
それを行うための合理的な方法です。
変数をユーザー テキストに置き換えないでください (これは XML インジェクションです - バグが多く、安全ではありません)。それらをエスケープされたテキストに置き換えます。XML エスケープ関数は次のとおりです: http://msdn.microsoft.com/en-us/library/system.security.securityelement.escape%28VS.80%29.aspx
これは、HTML で行う場合と同じです。
これが「xyz を除く XML」であるという考えは、おそらくもっと綿密に検討する必要があります。これに適切に取り組むには、「xyz を除く XML」と呼ぶ言語の文法を定義する必要があります。次に、その文法に準拠したドキュメントを分析するパーサーを作成する必要があります。このパーサーの出力は、入力の XML 表現にすることができます。これはすべて非常に実行可能です。簡単ではありませんが、実行可能です。もちろん、XML のような標準を使用する利点は、すぐに使えるパーサーを入手できることです。一方、独自の文法を考案した場合は、独自のパーサーを作成する必要があります。
自分の言語に適したパーサーを作成するには、特に広範なテストが必要なため、時間がかかります。テストが不十分な悪いパーサーを作成するのは、おそらく非常に簡単です。これは、多くの悪いプログラマーが行うことです。このような状況にある優れたソフトウェア エンジニアは、標準に準拠することの利点を認識しています。