我在db表中存储了一个xml字符串,其中包含换行符。 在我的C#3.5程序中,我使用Linq加载和操作它到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>
答案 0 :(得分:3)
您要做的是在XmlWriter上设置格式设置,因此请更改您的行:
var settings = new XmlWriterSettings()
{
Indent = true
};
对于这样的事情:
var settings = new XmlWriterSettings()
{
Indent = true,
IndentChars = "\n",
NewLineOnAttributes = true
};
答案 1 :(得分:1)
感谢大家的回复。最后,我可以做到这一点。
我的方法不使用Linq2Xml / SAX解析器。使用StringBuilder生成xml并在winforms Rich文本框控件的UI中显示它。现在,我可以看到在UI中的换行符。
答案 2 :(得分:0)
每当你将XML文档转换为字符串并开始操作字符串时,你应该自己想一想,“自我,我做错了什么。”我不确定你的描述是否属实,但我打赌它是。
如果您从数据库中提取的XML中的空格很重要,那么在将其解析为XElement
时,您希望保留它。为此,请使用执行此操作的XElement.Parse
重载,例如:
XElement testXmlNode = XElement.Parse(xmlFromDbWithLFChars, LoadOptions.PreserveWhitespace);
执行此操作时,解析器将在已解析的XElement
文档的文本节点中将空白字符与原始字符串中的空格字符完全相同。 XmlWriter
不会弄乱文本节点中的现有空格(虽然如果你告诉它缩进它会添加新的空格),所以这应该可以得到你想要的东西。
答案 3 :(得分: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字符串。
答案 4 :(得分:0)
您是否尝试过确保文本框处于多行模式且accepts carriage return?
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!";
}