XML ドキュメントを Web 要求しています。Xdocument.Load(stream)
XML に が含まれているため、例外がスローされ、したがってlike&
が期待されます。;
&
ストリームを文字列に読み取って に置き換えまし&
たが、それにより&
、 のような正しくエンコードされた他のすべての特殊文字が壊れø
ました。
に解析する前に、文字列内の許可されていないすべての文字をエンコードする簡単な方法はありXDocument
ますか?
XML ドキュメントを Web 要求しています。Xdocument.Load(stream)
XML に が含まれているため、例外がスローされ、したがってlike&
が期待されます。;
&
ストリームを文字列に読み取って に置き換えまし&
たが、それにより&
、 のような正しくエンコードされた他のすべての特殊文字が壊れø
ました。
に解析する前に、文字列内の許可されていないすべての文字をエンコードする簡単な方法はありXDocument
ますか?
@espvar、
これは入力XMLです。
<root><child>nospecialchars</child><specialchild>data&data</specialchild><specialchild2>You.. & I in this beautiful world</specialchild2>data&</root>
そして主な機能:
string EncodedXML = encodeWithCDATA(XMLInput); //Calling our Custom function
XmlDocument xdDoc = new XmlDocument();
xdDoc.LoadXml(EncodedXML); //passed
関数encodeWithCDATA():
private string encodeWithCDATA(string stringXML)
{
if (stringXML.IndexOf('&') != -1)
{
int indexofClosingtag = stringXML.Substring(0, stringXML.IndexOf('&')).LastIndexOf('>');
int indexofNextOpeningtag = stringXML.Substring(indexofClosingtag).IndexOf('<');
string CDATAsection = string.Concat("<![CDATA[", stringXML.Substring(indexofClosingtag, indexofNextOpeningtag), "]]>");
string encodedLeftPart = string.Concat(stringXML.Substring(0, indexofClosingtag+1), CDATAsection);
string UncodedRightPart = stringXML.Substring(indexofClosingtag+indexofNextOpeningtag);
return (string.Concat(encodedLeftPart, encodeWithCDATA(UncodedRightPart)));
}
else
{
return (stringXML);
}
}
エンコードされたXML(つまり、xdDoc.OuterXml):
<root>
<child>nospecialchars</child>
<specialchild>
<![CDATA[>data&data]]>
</specialchild>
<specialchild2>
<![CDATA[>You.. & I in this beautiful world]]>
</specialchild2>
<![CDATA[>data&]]>
</root>
私が使用したのは、substring、IndexOf、stringConcat、および再帰関数呼び出しだけです。コードのどの部分も理解していない場合はお知らせください。
私が提供したサンプルXMLは、親ノードにもデータを持っています。これは一種のHTMLプロパティです。例:<div>this is <b>bold</b> text</div>..
そして、特殊文字(&。)がある場合、私のコードは<b>
タグ外のデータのエンコードを処理します。
'&'のみのエンコードを処理しており、..データに'<'や'>'、一重引用符、二重引用符などの文字を含めることはできません。
この種の方法は推奨されません!! 理由はあなたの質問にあります!
( &をに置き換え&
ます)>
&gt;
正規表現を使用する以外のより良い提案は、そのようなコード化されていない XML を生成しているソース コードを変更することです。
「string concat」を使用して XML を生成する (.NET) コードを見つけました。(代わりに XML-DOM を使用する必要があります)
ソース コードを変更するアクセス権がある場合は、それを使用することをお勧めします.. そのような半分エンコードされた XML のエンコードは完全に保証されていないためです!
xml で CDATA セクションを試す
CDATA セクションは、テキスト ノードを持つことができる場所でのみ使用できます。
<foo><![CDATA[Here is some data including < , > or & etc) ]]></foo>