6

改行文字を含む xml 文字列を db テーブルに格納しました。私の C# 3.5 プログラムでは、Linq to xml を使用してそれを読み込んで操作し、UI フォームのテキスト ボックス コントロールに文字列として表示します。

この xml をインデントするだけでなく、UI に表示する際にライン フィード/キャリッジ リターンを維持する必要があります。

インデントできますが、xml で LF/CR 文字を保持するにはどうすればよいですか??

サンプル C# コードは次のとおりです。

    XElement rootNode = CreateRootNode();
    XElement testXmlNode = XElement.Parse(xmlFromDbWithLFChars);

    rootNode.Add(testXmlNode );

    var builder = new StringBuilder();
    var settings = new XmlWriterSettings()
    {
     Indent = true
    };

    using (var writer = XmlWriter.Create(builder, settings))
    {
     rootNode.WriteTo(writer);
    }
    xmlString  = builder.ToString();   

    xmlString = xmlString.Replace("
", Environment.NewLine); //Doesnt work

    xmlString = xmlString.Replace("
", Environment.NewLine);  //Doesnt work

//Heres how the xml should look like in the UI control:
 <TestNode
             name="xyz"
             Id="12">
             <Children>
                  <Child name="abc" location="p" />
             </Children>
    </TestNode>
4

5 に答える 5

3

やりたいことは、XmlWriter で書式設定を設定することなので、行を変更します。

var settings = new XmlWriterSettings() 
    { 
     Indent = true 
    }; 

このようなものに:

var settings = new XmlWriterSettings() 
    { 
     Indent = true,
     IndentChars = "\n",
     NewLineOnAttributes = true
    }; 
于 2010-11-16T15:20:16.830 に答える
1

ご回答ありがとうございます。最後に、これを機能させることができました。

私のアプローチでは、Linq2Xml/SAX パーサーを使用しません。StringBuilder を使用して xml を生成し、それを winforms のリッチ テキスト ボックス コントロールの UI に表示しています。

于 2010-11-17T08:01:33.777 に答える
0

テキストボックスが複数行モードで、キャリッジリターンを受け入れることを確認してみましたか?

public void CreateMyMultilineTextBox() {
   // Create an instance of a TextBox control.
   TextBox textBox1 = new TextBox();

   // Set the Multiline property to true.
   textBox1.Multiline = true;
   // Add vertical scroll bars to the TextBox control.
   textBox1.ScrollBars = ScrollBars.Vertical;
   // Allow the RETURN key to be entered in the TextBox control.
   textBox1.AcceptsReturn = true;
   // Allow the TAB key to be entered in the TextBox control.
   textBox1.AcceptsTab = true;
   // Set WordWrap to true to allow text to wrap to the next line.
   textBox1.WordWrap = true;
   // Set the default text of the control.
   textBox1.Text = "Welcome!";
 }
于 2010-11-19T15:50:37.230 に答える
0

XmlReader を使用して、新しい行とすべてを保持できます。テスト時に問題なく動作したサンプル コードを次に示します。

System.Xml.XmlReader reader = System.Xml.XmlReader.Create("XML URI here");
System.Text.StringBuilder sb = new System.Text.StringBuilder();
while (reader.Read())
{
    sb.Append(reader.ReadOuterXml());
}
reader.Close();
txtXML.InnerText = sb.ToString();
txtXML.Visible = true;

私のテストでは、XML ファイルをロードしました。操作した XML 文字列をロードできます。

于 2010-11-14T08:12:27.317 に答える
0

XML ドキュメントを文字列に変換し、文字列の操作を開始するときはいつでも、「自分は何か間違ったことをしている」と考える必要があります。あなたの説明からそれが本当かどうかはわかりませんが、きっとそうだと思います。

データベースから取得している XML の空白が重要な場合は、それを解析してXElement. これを行うには、これを行うオーバーロードを使用しますXElement.Parse。たとえば、次のようになります。

XElement testXmlNode = XElement.Parse(xmlFromDbWithLFChars, LoadOptions.PreserveWhitespace);

これを行うと、パーサーは、解析されたXElementドキュメントのテキスト ノードの空白文字を、元の文字列とまったく同じ場所に残します。 XmlWriterテキストノードの既存の空白を台無しにすることはありません(ただし、インデントするように指示すると、新しい空白が追加されます)。これにより、必要なものが得られるはずです。

于 2010-11-12T05:45:22.700 に答える