0

XML ドキュメントを Web 要求しています。Xdocument.Load(stream)XML に が含まれているため、例外がスローされ、したがってlike&が期待されます。;&

ストリームを文字列に読み取って に置き換えまし&たが、それにより&、 のような正しくエンコードされた他のすべての特殊文字が壊れøました。

に解析する前に、文字列内の許可されていないすべての文字をエンコードする簡単な方法はありXDocumentますか?

4

3 に答える 3

0

@espvar、

これは入力XMLです。

<root><child>nospecialchars</child><specialchild>data&data</specialchild><specialchild2>You.. & I in this beautiful world</specialchild2>data&amp;</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&amp;]]>
</root>

私が使用したのは、substring、IndexOf、stringConcat、および再帰関数呼び出しだけです。コードのどの部分も理解していない場合はお知らせください。

私が提供したサンプルXMLは、親ノードにもデータを持っています。これは一種のHTMLプロパティです。例:<div>this is <b>bold</b> text</div>.. そして、特殊文字(&。)がある場合、私のコードは<b>タグ外のデータのエンコードを処理します。

'&'のみのエンコードを処理しており、..データに'<'や'>'、一重引用符、二重引用符などの文字を含めることはできません。

于 2012-12-03T10:17:23.177 に答える
0

この種の方法は推奨されません!! 理由はあなたの質問にあります!

( &をに置き換え&amp;ます)&gt;&amp;gt;

正規表現を使用する以外のより良い提案は、そのようなコード化されていない XML を生成しているソース コードを変更することです。
「string concat」を使用して XML を生成する (.NET) コードを見つけました。(代わりに XML-DOM を使用する必要があります)
ソース コードを変更するアクセス権がある場合は、それを使用することをお勧めします.. そのような半分エンコードされた XML のエンコードは完全に保証されていないためです!

于 2012-11-30T17:13:12.263 に答える
0

xml で CDATA セクションを試す

CDATA セクションは、テキスト ノードを持つことができる場所でのみ使用できます。

<foo><![CDATA[Here is some data including < , > or & etc) ]]></foo>
于 2012-11-30T17:12:21.120 に答える