2013-03-30 4 views
1

У меня есть XML-документ, в котором содержатся данные с символом <.Strip <Character from XML content

<Tunings> 
    <Notes>Norm <150 mg/dl</Notes> 
</Tunings> 

код я использую:

StreamReader objReader = new StreamReader(strFile); 
string strData = objReader.ReadToEnd(); 

XmlDocument doc = new XmlDocument(); 

// Here I want to strip those characters from "strData" 

doc.LoadXml(strData); 

Так он дает ошибку:

Name cannot begin with the '1' character, hexadecimal value 0x31.

Так есть ли способ, чтобы лишить эти символы из XML, прежде чем нагрузки вызовов.?

+0

У вас есть доступ к коду, создавающему XML-файл? – rhughes

+6

«У меня есть XML-документ» - нет, вы этого не делаете. '<150' не является допустимым тегом XML. Вместо того, чтобы фиксировать считыватель, проверьте, можете ли вы исправить генератор файла. В противном случае вы в значительной степени застреваете в реализации своего собственного синтаксического анализатора для этого формата XML-типа, но не совсем. – dtb

+0

Да .. Я могу исправить это во время создания, но теперь я хочу, чтобы файлы импортировались, даже если они содержат эти недопустимые символы. –

ответ

0

Если это только происходит в разделе <Notes>, я бы рекомендовал вам изменить создание файла XML, чтобы использовать CDATA тег содержит текст в Notes, например:

<Notes><![CDATA[Norm <150 mg/dl]]></Notes> 

CDATA тег говорит синтаксическим анализаторам XML не анализировать символы между <![CDATA[ и ]]>. Это позволяет вам иметь символы в вашем XML, которые в противном случае нарушали бы разбор.

Вы можете использовать тэг CDATA для любой ситуации, когда вы знаете (или имеете разумные ожидания) специальные символы в этих данных.

Попытка обработки специальных символов во время разбора (без CDATA) будет более трудоемкой (и разочаровывающей), чем просто фиксация создания XML, в первую очередь, IMO. Плюс: «Норма < 150 мг/дл» составляет , а не то же, что и «Norm 150 mg/dl», и это различие может быть важно для тех, кто нуждается в этой информации.

0

Как указано в комментарии, у вас нет XML-документа. Если вы знаете, что единственный способ, которым эти документы отклоняются от юридического XML, как в вашем примере, вы можете запустить файл через регулярное выражение и заменить <(?:\d) на &amp;. Это найдет < рядом с номером и правильно закодирует его.