Потеря новых строк с XDocument - PullRequest
5 голосов
/ 01 сентября 2011

Я заполняю TreeView узлами на основе XML-документа.Однако, кажется, что когда я собираюсь поместить значение атрибута в текстовое поле, он теряет его переводы строк / возврат каретки / табуляции.

Я начинаю с добавления группы узлов с «именами задач».Каждая задача имеет один или несколько запросов в 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);, похоже, тоже не работает.

1 Ответ

9 голосов
/ 01 сентября 2011

Процессоры XML должны нормализовать значения атрибутов путем преобразования их пробельных символов (CR, LF, HT и т. Д.) В один пробел .

Если вы хотите иметь значения с такими символами, вам следует рассмотреть возможность их использования в качестве текстовых узлов вместо значений атрибутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...