Неверная разметка DHL XML с комментариями Как отправить XML-строку [duplicate]

grep -Erni + "text you wanna search"

Команда будет искать рекурсивно во всех файлах и каталогах текущего каталога и печатать результат.

Примечание: если ваш выход grep не окрашен, вы можете изменить его, используя grep = 'grep --color = always' alias в вашем файле src оболочки

789
задан animuson 4 September 2014 в 15:44
поделиться

9 ответов

Если вы используете соответствующий класс или библиотеку, они будут выполнять экранирование для вас.

escape-символы XML

Есть только пять:

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

Экранирующие символы зависят от того, где специальный символ используемый.

Примеры могут быть проверены в службе валидации разметки W3C .

Текст

Безопасный способ состоит в том, чтобы избежать всех пяти символов в текст, однако, три символа ", ' и > не должны быть экранированы в тексте:

<?xml version="1.0"?>
<valid>"'></valid>

Атрибуты

Безопасный способ - убежать все пять символов в атрибутах, однако, символ > не должен быть экранирован в атрибутах:

<?xml version="1.0"?>
<valid attribute=">"/>

Символу ' не нужно экранировать в атрибутах, если кавычки " :

<?xml version="1.0"?>
<valid attribute="'"/>

Аналогично, " не нужно экранировать в атрибутах, если кавычки ':

<?xml version="1.0"?>
<valid attribute='"'/>

Комментарии

Все 5 специальных символов не должны удаляться в комментариях:

<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>

CDATA

Все 5 специальных символов не должны выходить в секции CDATA :

<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>

Инструкции по обработке

Все 5 специальных символов не должны быть экранированы в инструкциях обработки XML:

<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>

XML и HTML

HTML имеет собственный набор escape-кодов w он покрывает намного больше персонажей.

1156
ответ дан Quentin 22 August 2018 в 14:31
поделиться
  • 1
    Конечный источник: w3.org/TR/xml/#syntax – MicSim 27 October 2010 в 16:29
  • 2
    @Pacerier, я прошу вас не писать собственный код выхода HTML / HTML. Используйте библиотечную функцию или вы обязательно пропустите специальный случай. – Jason 16 March 2012 в 11:23
  • 3
    Также для разрывов строк вам необходимо использовать & amp; #xA; & Амп; #xD; и & amp; # x9; для вкладки, если вам нужны эти символы в атрибуте. – radistao 27 November 2012 в 00:33
  • 4
    Если вы собираетесь использовать Find / Replace, просто не забудьте сделать & amp; amp; замена перед другими. – Doug 15 June 2013 в 22:29
  • 5
    Из Википедии: «Все разрешенные символы Юникода могут быть представлены с помощью числовой символьной ссылки. & Quot; Так что их намного больше 5. – Tim Cooper 15 August 2014 в 08:47

Согласно спецификациям Консорциума World Wide Web (w3C), существует 5 символов, которые не должны отображаться в их литеральной форме в документе XML , за исключением случаев, когда они используются в качестве разделителей разметки или внутри комментарий, инструкция по обработке или раздел CDATA. Во всех других случаях эти символы должны быть заменены либо с использованием соответствующего объекта, либо с помощью числовой ссылки в соответствии со следующей таблицей:

Исходный символ XMLXML замещение XML числовая замена & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP ; & амп; л; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & амп; # 60; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP ; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; > & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP ; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & амп; GT; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & амп; # 62; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP ; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; «& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & амп; # 34; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & амп; # 38; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; «& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP ; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & амп; APOS; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & амп; # 39; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; также использоваться в HTML, за исключением & amp; ap ;, который был введен с XHTML 1.0 и не объявлен в HTML 4. По этой причине и для обеспечения ретро-совместимости спецификация XHTML рекомендует использовать & amp; # 39; .

66
ответ дан Albz 22 August 2018 в 14:31
поделиться
  • 1
    – Shaun McCance 24 August 2013 в 14:58
  • 2
    Как указано выше, & GT; & Quot; & Амп; 'не нужно избегать при использовании в качестве разделителей разметки или в комментарии, инструкции обработки или секции CDATA. то есть когда вы используете & lt; & GT; как тег XML, вы не избегаете этого. То же самое для комментария (вы бы избежали & amp; в прокомментированной строке XML-файла? Вам не нужно, и ваш XML все еще действителен, если вы этого не сделаете). Это четко указано в официальных рекомендациях для XML по W3C . – Albz 1 October 2013 в 08:21
  • 3
    @ShaunMcCance > должен быть экранирован, если он следует за ]] в пределах содержимого, если только он не предназначен для того, чтобы быть частью разделителя ]]>, который указывает конец раздела CDATA. – Lee D 25 April 2014 в 18:45
  • 4
    Не быть некромантом, но @Albz неверно говорить, что эти символы ДОЛЖНЫ быть разрешены в содержании. См. Раздел 2.4 в w3.org/TR/REC-xml/#NT-CharData . Версия TL; DR состоит в том, что в содержимом элемента chardata & amp; amp; и & lt; всегда должны быть обеспечены. & Gt; символ МОЖЕТ быть предоставлен, хотя он ДОЛЖЕН быть, когда появляется в строковой строке "]] & gt;", поскольку в противном случае это будет считаться завершением раздела CDATA. Для одиночной кавычки и двойной кавычки вы можете сбежать, если хотите. Вот именно, для чардата внутри элементов. Другие компоненты XML имеют другие правила. – chris.leonard 3 May 2016 в 17:52

Экранирующие символы различаются для тегов и атрибутов.

Для тегов:

 < &lt;
 > &gt; (only for compatibility, read below)
 & &amp;

Для атрибутов:

" &quot;
' &apos;

http: //www.w3.org/TR/2008/REC-xml-20081126/#syntax

Символ амперсанда (& amp;) и левая угловая скобка (& lt;) не должны отображаться в их литеральной форме, кроме случаев, когда они используются в качестве разделителей разметки или в комментарии, инструкции обработки или секции CDATA. Если они необходимы в другом месте, они должны быть экранированы с использованием либо числовых символов, либо строк «& amp;» и «& amp; lt;» соответственно. Прямоугольная скобка (>) может быть представлена ​​с использованием строки «& amp; gt;» и должна, для совместимости, экранироваться с использованием «или» или символьной ссылки, когда она появляется в строке «]]> «в содержании, когда эта строка не помещает конец раздела CDATA.

Чтобы позволить значениям атрибута содержать как одиночные, так и двойные кавычки, апостроф или символ одной кавычки (') могут быть представлены как «& amp;», и символ двойной кавычки («) как« & amp; quot; ".

44
ответ дан Justin M. Keyes 22 August 2018 в 14:31
поделиться
  • 1
    Это означает, что для атрибутов нужно избегать только кавычек, но в дополнение к трем другим символам – eug 5 July 2018 в 04:46

Новый, упрощенный ответ на старый, часто задаваемый вопрос ...

Упрощенное исключение XML

  1. Всегда (90% важно запомнить) Escape < как &lt;, если только < не запускает <tag/> . Escape & как &amp;, если только & не запускает &entity; .
  2. Значения атрибутов (9% важно запомнить) attr=" ' Одиночные кавычки ' в пределах двойных кавычек. " attr=' " Двойные кавычки " в порядке одинарной кавычки. ' В противном случае " выбрано как &quot; и ' как &apos;.
  3. Комментарии , CDATA и Инструкции по обработке (важно помнить о 0,9%) <!-- В комментариях --> ничего не должно быть экранировано, но никакие строки -- не разрешены. <![CDATA[ В CDATA ]]> ничего не должно быть экранировано, но никакие строки ]]> не разрешены. <?PITarget В PIs ?> ничего не должно быть экранировано, но никакие строки ?> не разрешены.
  4. Esoterica (0.1% важно запомнить) Escape ]]> как ]]&gt;, если только ]]> не закончит раздел CDATA. (Это правило применяется к символьным данным вообще, даже вне секции CDATA.)
9
ответ дан kjhughes 22 August 2018 в 14:31
поделиться
  • 1
    Еще одно правило, заслуживающее внимания: ]]> должно быть экранировано как ]]&gt;, даже если оно не находится в разделе CDATA. Самый простой способ достижения этого может заключаться в always escape > как &gt;. – Michael Kay 29 May 2018 в 15:24
  • 2
    Спасибо, @MichaelKay. Я включил вашу полезную заметку о ]]>, но предпочел отодвинуть ее на эзотерику, а не предлагать избежать > always (чего не должно быть, как вы знаете). Моя цель здесь, чтобы правила XML escaping легко запоминались и на 100% точным . – kjhughes 3 June 2018 в 14:01

в дополнение к общеизвестным пяти символам [& lt ;,>, & amp ;, ", '] Я также мог бы избежать символа вертикальной вкладки (0x0B). Он действителен UTF-8, но недействителен XML 1.0 и даже многие библиотеки (включая libxml2) пропускают его и молча выводят недопустимый XML.

19
ответ дан Perception 22 August 2018 в 14:31
поделиться

Только & lt; и & amp; должны быть экранированы, если они должны обрабатываться символьными данными, а не разметкой:

http://www.w3.org/TR/xml11/#syntax

-3
ответ дан Questionless 22 August 2018 в 14:31
поделиться

Возможно, это поможет:

Список ссылок на символы XML и HTML-символов :

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

В этой статье перечислены следующие пять предопределенных XML-объектов:

quot  "
amp   &
apos  '
lt    <
gt    >
87
ответ дан Ry- 22 August 2018 в 14:31
поделиться

Сокращен из: http://en.wikipedia.org/wiki/XML#Escaping

Существует пять предопределенных сущностей:

&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "

«Все разрешенные символы Юникода могут быть представлены с помощью числовой символьной ссылки». Например:

&#20013;

Большинство управляющих символов и других диапазонов Юникода специально исключены, что означает (я думаю), что они могут " t происходит либо с экранированным, либо прямым:

http://en.wikipedia.org/wiki/Valid_characters_in_XML

4
ответ дан Tim Cooper 22 August 2018 в 14:31
поделиться

Это зависит от контекста. Для контента это & ​​lt; и & amp ;, и]]> (хотя строка из 3 вместо одного символа). Для значений атрибутов это & ​​lt; и & amp; и «и». Для CDATA это]]>.

3
ответ дан 把友情留在无盐 22 August 2018 в 14:31
поделиться
Другие вопросы по тегам:

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