0

エスケープされていないコンテンツを含む「xml」の文字列を取得しています。以下は簡単な例です。

<link text="This is some text with "potentially" some quoted text in it." linktype="external" anchor="" target="" />

XmlDocument.LoadXml()私が抱えている問題は、を使用して上記を文字列として変換しようとすると、LoadXml()属性「テキスト」が保持するコンテンツの内部引用符でエスケープがないため、例外がスローされることです。特にコンテンツをエスケープするための比較的簡単な方法はありますか? それとも、自分で解析/エスケープ/再構築する必要がありますか?

私はこのテキストを生成していません。別のプロセスから次のような文字列で取得するだけです:

"<link text="This is some text with "potentially" some quoted text in it." linktype="external" anchor="" target="" />"
4

4 に答える 4

1

はhtml文字エンコーディングを使用する必要があり"ます&quot;

しかし、入力が不正な xml テキストであるため、そのテキストを解析し、引用符をエンコードされた翻訳に置き換える方法を見つける必要があります。多分いくつかの正規表現解析..

これは仕事を作るための単なる創造的な方法だと考えてください。私はそれが汚いことを知っていますが、ほとんどの場合はうまくいきます:

 private static string XmlEncodeQuotes(string target) {

        string result = string.Empty;
        for (int i = 0; i < target.Length; i++)
        {
            if (target[i] == '"')
            {
                if (target[i - 1] != '=')
                    if (!Regex.IsMatch(target.Substring(i), @"^""\s[a-zA-Z]+="""))
                    {
                        result += "&quot;";
                        continue;
                    }
            }
            result += target[i];
        }
        return result;
    }
于 2012-07-27T20:28:43.820 に答える
0

xml ドキュメントの一部を CDATA タグ内にラップしようとしましたか?

于 2012-07-27T20:25:39.750 に答える
0

System.Security.SecurityElement.Escape() は機能しますか? そうでない場合は、XmlTextWriter もあります。

于 2012-07-27T20:40:12.623 に答える
0

引用符をエスケープする方法を単に尋ねている場合は、次のようにして完了です

&quot;

何を扱っているのかわかりませんが、問題の根本は、受信しているデータの形式が正しくないという事実です。

  • オプション 1) データをクリーンアップしない限り、ほとんどのパーサーに無効な XML データをロードさせるのは困難です。他の人より寛容な人もいます。HTML Agility Packで運が良いかもしれません

  • オプション 2)正規表現を使用して XML を修正します。

  • オプション 3) 解析ソリューションのコーディングがオプションでない場合は、XSLT を使用します。変換を作成し、テンプレートを追加して問題を修正するだけです。

于 2012-07-27T20:41:33.300 に答える