4

Xml と Linq を使用して、XHTML ドキュメントで XML 操作を実行しています。

ブラウザーに出力するために文字列に戻す場合、XElement を として作成するときに、スクリプト タグを元の提供された形式でレンダリングします <script />

これにより、市場に出回っているほとんどのブラウザーで正しく処理されなくなります。

このようなスクリプトタグを出力する方法で、XElement から String への変換を実行したいと思います<script></script>

誰かがそれについて私を助けることができますか? 前もって感謝します。:)

最初の編集 さらに情報を提供すると、データは MSSQL 2008R2 データベースの xml フィールドから取得されます。xml フィールドから次のようにロードされます。 <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js" />

2 回目の編集 作業サンプル

using System;
using System.Linq;
using System.Xml.Linq;

namespace Test1
{
    class Test1
    {
        static void Main(string[] args)
        {
            XElement element = XElement.Parse("<div><script /><script>Test</script></div>");
            var EmptySet = (from e in element.DescendantsAndSelf()
                           where e.IsEmpty
                           select e);
            foreach(XElement e in EmptySet)
            {
                e.Value = String.Empty;
            }
            Console.WriteLine(element.ToString(SaveOptions.None));
        }
    }
}

そしてその結果

<div>
  <script></script>
  <script>Test</script>
</div>
4

2 に答える 2

4

使ってみましたSaveOptions.DisableFormattingか?

問題を実際に再現することはできません。script自分で要素を作成していますか?これはうまくいきます:

using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        XElement element = XElement.Parse("<script></script>");
        // Both of these write <script></script>
        Console.WriteLine(element.ToString(SaveOptions.None));
        Console.WriteLine(element.ToString(SaveOptions.DisableFormatting));
    }
}

(同じオプションがあります。XDocument.Save)XElement.Save

編集: 子ノードのない要素を単一の空のテキスト ノードを持つ要素に変更するには、element.Value"" に設定するだけです。例えば:

XElement element = XElement.Parse("<script />");
Console.WriteLine(element.ToString()); // Prints <script />
element.Value = "";
Console.WriteLine(element.ToString()); // Prints <script></script>
于 2010-06-29T06:16:47.737 に答える
0

使用する

XElement.Save(XmlWriter writer)

XmlWriter の出力として StringWriter を使用すると、高速で信頼性の高い方法で必要なものを取得できます。

于 2010-06-29T06:14:48.870 に答える