Чтение XML с “&\” в объект XMLDocument C#

Насколько я понимаю, вы хотите сохранить его как:

[{}, {}]

Но не:

({}, {})

Итак, после создания объекта, подтолкните их к массив:

file_data.push(fileData)

Теперь вы можете перебирать массив file_data в любое время.

18
задан Joel Coehoorn 23 September 2008 в 15:07
поделиться

6 ответов

Проблема состоит в том, что xml не правильно построен. Правильно сгенерированный xml перечислил бы те данные как это:

Prepaid & Charge

я должен был решить ту же проблему прежде, и я сделал это с этим regex:

Regex badAmpersand = new Regex("&(?![a-zA-Z]{2,6};|#[0-9]{2,4};)");

Объединение, что со строковой константой, определенной как это:

const string goodAmpersand = "&";

Теперь можно просто сказать badAmpersand.Replace(<your input>, goodAmpersand);

Примечание, что простое String.Replace("&", "&amp;") не достаточно хорошо, так как Вы не можете знать заранее для данного документа ли любой & символы будут кодированы правильно, неправильно, или даже оба в том же документе.

выгоды здесь - то, что необходимо сделать это к xml документу прежде загрузка его в синтаксический анализатор, который вероятный означает дополнительную передачу через него. Кроме того, это не составляет амперсанды в разделе CDATA. Наконец, это только амперсанды выгод, не другие запрещенные символы как <. Обновление: на основе комментария, я должен обновить выражение для кодированного шестнадцатеричными числами (& #x... ;) объекты также.

, Относительно которого символы могут вызвать проблемы, фактические правила являются небольшим комплексом. Например, определенные символы позволяются в данных, но не как первая буква имени элемента. И нет никакого простого списка запрещенных символов. Вместо этого большой ряд (состоящий из нескольких несмежных участков), UNICODE определен как законный , и что-либо за пределами этого недопустимо.

Поэтому, когда это сводится к нему, необходимо доверять источнику документа, чтобы иметь, по крайней мере, определенное количество соответствия и непротиворечивости. Например, я нашел, что люди часто достаточно умны, чтобы удостовериться, что теги работают правильно и выходят из < даже если они не знают это & не позволяется, следовательно Ваша проблема сегодня. Однако лучшая вещь состояла бы в том, чтобы получить зафиксированный в источнике.

, О, и примечание о предложении CDATA: я использовал бы это для проверки xml, который я создаю , правильно построено, но при контакте с существующим xml снаружи, я нахожу regex метод легче.

40
ответ дан 30 November 2019 в 06:12
поделиться

Ваша база данных не содержит XML-документы. Это содержит некоторые правильно построенные XML-документы и некоторые строки, которые похожи на XML человеку.

, Если это вообще возможно, необходимо зафиксировать это - в частности, необходимо зафиксировать любой процесс, генерирует уродливые XML-документы. Фиксация программы, которая считывает данные из этой базы данных, просто помещает обои по трещине в стене.

3
ответ дан 30 November 2019 в 06:12
поделиться

Существует несколько символов, которые заставят данные XML сообщаться, как плохо сформировано.

От w3schools:

Символы как "<"; и "&"; недопустимы в элементах XML.

лучшее решение для входа Вы не можете доверять, чтобы быть XML-совместимыми, должен перенести его в теги CDATA, например,

<![CDATA[This is my wonderful & great user text]]>

Все в <![CDATA[ и ]]>, теги проигнорированы синтаксическим анализатором.

2
ответ дан 30 November 2019 в 06:12
поделиться

Можно заменить & с &amp;

Или Вы могли бы также смочь использовать разделы CDATA.

2
ответ дан 30 November 2019 в 06:12
поделиться

Веб-приложение не виновным, XML-документ. Амперсанды в XML должны быть закодированы как &amp;. Отказ сделать так является синтаксической ошибкой.

Редактирование: в ответе на последующий вопрос, да существуют все виды подобных ошибок. Например, несбалансированные теги, незакодированные меньше, подписываются, закрыл кавычки значения атрибута, октеты за пределами кодировки символов и различных причуд Unicode, нераспознанных ссылок на сущность, и так далее. Чтобы заставить любой достойный синтаксический анализатор XML использовать документ, тот документ должен быть правильно построен. Спецификация XML требует, чтобы синтаксический анализатор, встречающийся с уродливым документом, бросил фатальную ошибку.

4
ответ дан 30 November 2019 в 06:12
поделиться

Другие ответы все корректны, и я соглашаюсь с их советом, но позволяю мне просто добавить одну вещь:

не подавайте заявки, которые работают с не правильно построенный XML, он просто делает остальную часть наших жизней более трудной :).

Предоставленный, существуют времена, когда у Вас действительно просто нет выбора, если Вы не имеете никакого контроля над другим концом, но у Вас должен действительно быть он бросающий фатальную ошибку и жалующийся очень громко и явно о том, что повреждается, когда такое событие имеет место.

Вы могли, вероятно, взять его один шаг вперед и сказать "Ack! Этот XML повреждается в этих местах и по этим причинам, здесь - как я пытался зафиксировать его для создания его правильно построенным:...".

я не чрезмерно знаком с API MSXML, но самые хорошие синтаксические анализаторы XML позволят Вам устанавливать обработчики ошибок так, чтобы можно было захватить точную строку/номер столбца, где ошибки появляются наряду с получением кода ошибки и сообщения.

4
ответ дан 30 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: