【问题标题】:Losing newlines with XDocument使用 XDocument 丢失换行符
【发布时间】:2011-08-31 21:13:06
【问题描述】:

我正在使用基于 XML 文档的节点填充 TreeView。但是,似乎当我将属性的值放入文本框时,它会丢失换行符/回车符/制表符。

我首先添加一堆带有“任务名称”的节点。每个任务在 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;
    }
}

Query 属性值包含一个带有换行符、制表符等的长 SQL 查询。但这些似乎都没有出现在(多行)文本框中,尽管我对 Visual Studio 大喊大叫。我究竟做错了什么?此外,var doc = XDocument.Load(filename, LoadOptions.PreserveWhitespace); 似乎也不起作用。

【问题讨论】:

    标签: c# .net xml linq-to-xml


    【解决方案1】:

    XML processors must normalize attribute values by converting their whitespace characters (CR, LF, HT, etc) to a single space.

    如果您想获得带有此类字符的值,您应该考虑将它们作为文本节点而不是属性值。

    【讨论】:

    • 哎呀。好吧,就我而言,这不是一个真正的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多