Каков приемлемый способ хранения цитируемых данных в XML?

Каков приемлемый способ хранения цитируемых данных в XML?

Например, для node, что правильно?

  • (a) <name> Jesse "The Body" Ventura </name>
  • (b) <name> Jesse\The Body\Ventura </name>
  • (c) <name> Jesse "The Body" Ventura </название >
  • (d) ни один из указанных выше (просьба указать)

Если (a), что вы делаете для атрибутов? Если (c), действительно ли целесообразно смешивать HTML и XML? Точно так же, как вы обрабатываете одиночные и фигурные кавычки?

Ответ 1

Правильный ответ: A и C, поскольку " не является символом, который должен быть закодирован в данных элемента.

Вы всегда должны быть символами кодирования XML, такими как >, < и &, чтобы убедиться, что у вас нет проблем, если они НЕ находятся внутри раздела CDATA. Это ключевые элементы, которые необходимо учитывать для данных элемента.

Говоря об атрибутах, вы также должны быть осторожны с значениями ' и " внутри значений атрибутов в зависимости от типа символа, который вы используете для окружающего значения.

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

Ответ 2

Символьные данные внутри элементов XML могут содержать символы котировки, не избегая их. Единственными символами, которые не разрешены внутри элемента XML, являются "<", "&" и ' > ' (и символ ' > ' запрещен только в том случае, если он является частью последовательности символов "]] > ".

Чтобы не сказать, что экранирование кавычек - это не очень хорошая идея. Я просто говорю, что не избежать кавычек - это абсолютно корректный XML. См. Раздел 2.4 "Данные символов и разметка" в спецификации XML.

Итак, оба (a) и (c) в порядке.

Что касается атрибутов, значения атрибутов могут быть заключены в одинарные или двойные кавычки, поэтому, если он содержит один или другой, вы можете использовать противоположное для приложения значения. Если он будет содержать оба, тогда вам придется использовать объект символа для одного или обоих.

Что касается "фигурных кавычек", если вы говорите о специальных кавычках, отличных от ASCII, которые Word иногда конвертирует кавычки в - они не имеют особого значения в XML, поэтому вы можете делать что угодно (но они не может использоваться для добавления значений атрибутов ". Вам также необходимо убедиться, что кодировка символов для документа верна, поэтому они интерпретируются правильно.

Ответ 3

Двойные кавычки в текстовых узлах могут быть представлены либо как символ двойной кавычки, либо как объект &quot;. Двойные кавычки в значениях атрибутов могут быть представлены как символ двойной кавычки, если значение ограничено одинарными кавычками и наоборот; в противном случае избегайте их как &quot;

Это актуально только в том случае, если вы a) редактируете XML в текстовом редакторе, не поддерживающем XML, или b) создаете XML программно с помощью строковых манипуляций. Вообще говоря, вам следует избегать (а), если вы действительно не знаете, что делаете, или, по крайней мере, имеете возможность проверить правильность вашего XML после завершения редактирования.

И вам следует избегать (б) при любых обстоятельствах. Никогда не создавайте XML через строковые манипуляции; всегда используйте DOM или какой-либо другой инструмент.

Ответ 4

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

Ответ 5

Например, для node, что правильно?

Сама спецификация XML не говорит о узлах (кроме сравнения синтаксиса DTD с конечным автомодельным регулярным выражением). DOM node может быть атрибутом, элементом, текстом или любым другим типом node.

Внутри текста node вам нужно только избегать символов, которые синтаксический анализатор будет интерпретировать как начало другого node - поэтому вы бежите, и < как & и <,

Для переносимости часто бывает полезно избегать фигурных кавычек, но нет никаких оснований избегать простых кавычек в тексте XML.

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

<foo attribute="'ok'" attribute2='"also-ok"' attribute3="&quot;needed&quot;"/>

Обычно легче привыкнуть использовать только один тип и всегда избегать его. Я пишу довольно много XSLT и предпочитаю использовать "снаружи" и "внутри":

<xsl:value-of select="person[@name = 'bob']"/>

Если вы получаете параноик с экранированием, XPath становится менее читаемым:

<xsl:value-of select="person[@name = &apos;bob&apos;"/>

Если (c), действительно ли целесообразно смешивать HTML и XML?

XML определяет именованные объекты amp, gt, lt, apos и quot

HTML определяет еще много объектов.

Вы можете и должны использовать XML-имена в XML, предпочитая использовать числовой объект.

Объект lt исключает < и должны использоваться в текстовых и атрибутных значениях. Объект amp исчезает и должен использоваться в текстовых и атрибутных значениях. Объекты apos и quot исключают "и" и должны использоваться в значениях атрибутов. Объект gt немного бесполезен - в XML почти нет синтаксического требования к escape > . Может быть, > согласился только работать с < если он получил равную оплату.

Другой, который я использую в XSLT, который генерирует исходный код, является & #xa; который вставляет новую строку. & Амп; п; было бы более полезным, чем >

Аналогично, как вы обрабатываете одиночные и фигурные кавычки?

XML предназначен для разметки текста в Юникоде, а фигурные кавычки в нем не имеют особого значения. Однако это не редкость в том, что кодировка, используемая для XML-документа, неверно истолковывается в дикой природе. Поэтому, если он находится в закрытой среде и может гарантировать правильную кодировку Unicode у производителя и потребителя, я бы просто поместил его в XML. В противном случае используйте объект с числовым символом. Это верно для любого персонажа с кодовой точкой выше 127 - нет ничего особенного в кудрявых цитатах.

Ответ 6

Правильный ответ: "C".

Одиночные кавычки на самом деле не вызывают проблемы, но вам нужно быть осторожным с амперсандами и левыми угловыми скобками.

Ответ 7

Это действительно зависит. Если все, что вы хотите сделать, это кавычки в вашей XML-строке, тогда "A".

Но если есть смысл или вам нужно абстрагировать цитату (например, i18n), XML предоставляет более богатые возможности. Например:

<name>
  <given>Jesse</given>
  <family>Ventura</family>
  <nickName>the Body</nickName>
</name>

Overkill во многих ситуациях. Но если вам нужно правильно обрабатывать многие из мира разнообразных - и часто непоследовательных - схем именования, я бы подумал о кодировании ваших имен в этих строках. XML отлично подходит для этого.