I'm populating a TreeView with nodes based on an XML document. However, it seems that when I go to put an attribute's value into a textbox, it loses it's newlines/carriage returns/tabs.
I start by adding a bunch of nodes with "task names". Each task has one or more queries in the XML document. Like so: <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);
}
}
}
Later in a node click event:
void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
textBoxRaw.Text = string.Empty;
if (e.Node.Text.StartsWith("query"))
{
textBoxRaw.Text = e.Node.Name;
}
}
The Query attribute value contains a long SQL query with newlines, tabs, etc. But none of that seems to show up in the (multiline) text box, despite all my shouting at Visual Studio. What am I doing wrong? Also, var doc = XDocument.Load(filename, LoadOptions.PreserveWhitespace);
doesn't seem to work either.
XML processors must normalize attribute values by converting their whitespace characters (CR, LF, HT, etc) to a single space.
If you want to have values with such characters, you should consider having them as text nodes instead of attribute values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With