XML и символ &

2

Мне нужно передать символ и внутри элемента XML, но его не нравится, вот пример кода:

XmlDocument doc = new XmlDocument();
XmlElement batch = doc.CreateElement("Batch");
string item = "<field>http://mylink.com/page.aspx?id=1&disp=2</field>"
batch.InnerXml = item;

Его абсолютно важно, чтобы я включил эту ссылку внутри, так кто-нибудь знает, как обойти это?

Спасибо

  • 2
    зачем использовать xmlwriter, а затем решить выписать xml вручную?
Теги:

9 ответов

6
Лучший ответ

Побег: &amp;.

string item = "<field>http://mylink.com/page.aspx?id=1&amp;disp=2</field>";
10

Вам нужно избежать этого как &amp;.

  • 0
    лол - как именно?
8

Как говорят люди, побег элемента будет работать. Однако я считаю это немного чище:

XmlDocument doc = new XmlDocument();
XmlElement batch = doc.CreateElement("Batch");
XmlElement field = doc.CreateElement("field");
string link = "http://mylink.com/page.aspx?id=1&disp=2"
field.InnerText = link;
batch.AppendChild(field);
  • 0
    Да, намного больше нравится.
4

Устраните его как &amp;. Это называется HTML/XML-сущностями. См. Дополнительную информацию и список других лиц здесь и здесь.

Код должен выглядеть так:

string item = "<field>http://mylink.com/page.aspx?id=1&amp;disp=2</field>"
3

вы можете использовать &

3

Как указывали другие, вы можете просто использовать escape-последовательность &amp;. Однако более элегантный подход заключается не в том, чтобы напрямую обращаться к XML.

var doc = new XmlDocument();
var batch = doc.CreateElement("Batch");
var field = doc.CreateElement("field");
field.InnerText = "http://mylink.com/page.aspx?id=1&disp=2"
batch.Children.AppendChild(field);

Не нужно беспокоиться о том, чтобы избежать чего-либо, таким образом.:)

2

Используйте .InnerText, а не .InnerXml, и экземпляр XmlDocument выполнит все необходимые кодировки для вас, например, автоматически выйдет из режима &

.InnerXml используется, когда у вас уже есть строка xml, которая не должна быть экранирована, что здесь не так.

2

Если вы создадите элемент с помощью методов Xml, он отлично обернет все для вас. Поэтому снова используйте метод CreateElement и установите свойство InnerText элемента в вашу ссылку.

2
XmlDocument doc = new XmlDocument();
XmlElement batch = doc.CreateElement("Batch");
string item = "<field>http://mylink.com/page.aspx?id=1&amp;disp=2</field>"
batch.InnerXml = item;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню