Почему парсер .NET XML не может принимать специальные символы в строках? - PullRequest
0 голосов
/ 03 марта 2012

Я использую методы синтаксического анализа XML из System.Xml.Linq. Я уже давно игнорирую эту проблему, но наконец решил, что должен спросить, почему это так.

Если вы попытаетесь поместить открытую угловую скобку < в строковый атрибут, синтаксический анализатор сгенерирует исключение, потому что он думает, что открывает новый тег. Например:

<Foo text="This is my <sample> text" />

Почему он не может справиться с этим? Любой, кто знает что-то о парсерах, знает, что это не должно быть проблемой. Парсер должен понимать, что он находится в середине открытой строки, и может рассматривать этот символ как не специальный. Вместо этого я должен избежать их как &lt; везде.

Единственный ответ, который я могу придумать, это то, что это сознательный выбор. Дизайнеры решили, что в этой ситуации более вероятно, что кто-то забыл закрыть строку, а не то, что им нужен этот символ в строке. Верна ли эта гипотеза или за этим стоит реальная техническая причина, и я тот, кто не понимает парсеры? И что я могу сделать, чтобы не убежать от этих персонажей?

1 Ответ

3 голосов
/ 03 марта 2012

Это проблема XML - символ < недопустим внутри атрибута.

Вы должны экранировать <, & и " в атрибутах, как указано в спецификация .

Microsoft внедрила синтаксический анализатор, соответствующий спецификации.

...