2013-11-15 2 views
0

Я читаю некоторые параметры и генерирую XML-файл с ними. Я много читал о специальных символах, которые должны быть scaped, в частности, у меня есть функция, которая Scapes всех символов для значения в файле XML (если не используя CDATA):XML: Недопустимые символы внутри KEY

& ==> & 
< ==> &lt; 
> ==> &gt; 
" ==> &quot; 
' ==> &apos; 

В моем конкретном случае, есть только один случай, когда пользователь может ввести значение KEY, и вопрос в том, должен ли здесь быть недействительным эти символы (даже scaped)? Пример, пользователь вводит: key => ipaddress> value=> 192.168.1.25 Какой бы действительный вариант:

<ipaddress>>192.168.1.25</ipaddress>> 
or <ipaddress&gt;>192.168.1.25</ipaddress&gt;> 
or should the ">" character be omitted for the final string? 
+1

Если вы объединяете строки, вы не создаете XML-документ. Используйте правильный API. – Tomalak

+0

@Tomalak Спасибо за ответ. Я знаю, что вы имеете в виду, но в этом случае у меня не было выбора. Вопрос более «теоретический», я хотел знать, какие символы следует избегать внутри KEY, чтобы обеспечить «правильную» XML-структуру. – estradjs

ответ

1

Ни один из тех, кто будет работать, вы бы гораздо безопаснее использовать фиксированное имя элемента и положил ключ в качестве атрибута:

<entry key="ipaddress&gt;">192.168.1.25</entry> 

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

+0

Благодарим вас за ответ. Правильно ли, что любой из 5 ранее размещенных символов легальны внутри KEY в теге XML? Конечно, идеальный способ продолжения работы был бы подходящим API, поскольку это невозможно сейчас, я хотел бы получить информацию обо всех возможных проблемах, которые я должен рассмотреть, чтобы избежать проблем с форматированием для хорошо сформированного XML-документа. – estradjs

+0

@estradjs Правила того, что разрешено в именах элементов, можно найти в [спецификации XML] (http://www.w3.org/TR/xml/#NT-Name). Для английского языка это буквы, цифры, дефис, точка и подчеркивание, за исключением того, что первый символ должен быть буквой или подчеркиванием. Также двоеточие имеет особое значение для пространств имен и не должно использоваться для каких-либо других целей. И наоборот, атрибут _values_ позволяет практически ничего, кроме управляющих символов (хотя может потребоваться некоторое экранирование). –

+0

@estradjs ... и если вы используете надлежащий API, то экранирование будет обработано для вас. Вы действительно уверены, что у вас «нет выбора»? Практически любой язык программирования в эти дни будет иметь поддержку XML, часто у вас будет несколько API-интерфейсов на выбор. –

Смежные вопросы