Как записать содержимое строки в XML без кодов ...? - PullRequest
1 голос
/ 07 декабря 2008

У меня есть строка с угловыми скобками, например:

<element1>my text here</element1>

Строка буквально выглядит так, когда я записываю ее в консоль, в свой dataGridView или где-либо еще Тем не менее, я пытаюсь написать это как часть XML-документа.

Все в порядке, за исключением того, что в файле XML, который написан, выше отображается как:

&lt;element1&gt;my text here&lt;/element1&gt;

Как мне заставить это записать в виде моего буквального текста вместо кодов?

Спасибо!

-Adeena

Ответы [ 5 ]

4 голосов
/ 07 декабря 2008

Если вы хотите сохранить ее как строку, не экранируя все элементы, используйте блок CDATA:

<xml><![CDATA[<element1>my text here</element1>]]></xml>
2 голосов
/ 08 декабря 2008

Строка буквально выглядит следующим образом, когда я записываю ее в консоль, в свой dataGridView или где-либо еще.

Вы никогда не должны напрямую манипулировать строковым значением документа XML.

Я не делаю много абсолютных утверждений о разработке программного обеспечения, но это почти всегда верно. Это определенно верно, если у вас нет большого опыта работы с XML. Я предполагаю, что 25% или более проблем, с которыми сталкиваются люди, плохо знакомые с XML, вызваны этим.

Строка будет отображаться правильно, если вы загрузите XML в XmlDocument, найдете элемент, который его содержит, и запишите свойство InnerText элемента. DOM правильно выполняет обход текста в XML и из него, кодируя его так, чтобы разметка в тексте не мешала разметке XML. Вы хотите этого.

Еще одна вещь, которую я заметил: по крайней мере, в 90% случаев предложение использовать CDATA технически правильно, но во всех остальных отношениях неверно. Использование CDATA - это техника последней инстанции.

2 голосов
/ 07 декабря 2008

Ваша цель мне не ясна: как вы хотите, чтобы ваш окончательный XML-файл выглядел?

Если вы выводите его следующим образом, синтаксический анализатор XML будет интерпретировать «» как часть структуры, а не как содержимое.

<container><element1>my text here</element1></container>

Что касается записи вашего XML в виде строк, это плохая идея: экранирование есть по причине, и если вы не знаете спецификацию XML очень подробно, вы почти гарантированно допустите ошибку, сделав это. *

0 голосов
/ 07 декабря 2008

Хм.

Так что я думаю, что решил, что вместо использования XMLSerializer (который, как я думал, был бы интересный способ работы), я просто собираю строки всех своих элементов и записываю их как обычный текст. файл. Это похоже на работу и быть достаточно простым. У меня была пара других уникальных / странных вещей, и этот способ сделать это намного проще. :)

-Adeena

0 голосов
/ 07 декабря 2008

Это записывается как HTML Encoded Format , так как ваше приложение должно думать, что это контент, а не фактические элементы XML, поэтому оно экранирует его, как если бы это был контент.

Вы пытались использовать класс XmlWriter?

...