用XDocument丢失换行符
问题描述:
我使用基于XML文档的节点填充TreeView。但是,似乎当我将一个属性的值放入一个文本框时,它会丢失它的换行符/回车符/制表符。用XDocument丢失换行符
我首先添加了一堆带有“任务名称”的节点。每个任务在XML文档中都有一个或多个查询。像这样:<Tasks><Task name="aTaskName"><Queries><add Query="a long string with tabs and newlines and such" /></Queries></Task> ... </Tasks>
void PopulateQueries(XDocument doc, TreeView tree)
{
foreach (TreeNode node in tree.Nodes)
{
var taskName = node.Text;
var queriesNode = node.Nodes.Add("Queries");
var queries = doc.Descendants("Tasks")
.Descendants("Task")
.Where(d => d.Attribute("name").Value == taskName)
.Descendants("Queries")
.Descendants("add")
.ToList();
for (int i = 0; i < queries.Count;i++)
{
queriesNode.Nodes.Add(queries[i].Attribute("Query").Value, "query" + i);
}
}
}
中的一个节点点击事件之后:
void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
textBoxRaw.Text = string.Empty;
if (e.Node.Text.StartsWith("query"))
{
textBoxRaw.Text = e.Node.Name;
}
}
查询属性值包含换行符,制表符等长的SQL查询,但没有的,似乎在展现出来(多行)文本框,尽管我在Visual Studio大喊大叫。我究竟做错了什么?此外,var doc = XDocument.Load(filename, LoadOptions.PreserveWhitespace);
似乎也不工作。
答
如果你想让这些字符具有值,你应该考虑让它们作为文本节点而不是属性值。
+1这就是我想说的在我的评论。 –
哎呀。那么,对我来说这不是一个真正的选择。 –