Представлять пространство и табуляцию в теге XML - PullRequest
39 голосов
/ 05 февраля 2009

Как представить пространство и табуляцию в теге XML. Есть ли специальные символы для их представления.

Ответы [ 8 ]

58 голосов
/ 05 февраля 2009

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

space =  
tab   = 	
19 голосов
/ 18 июня 2013

Работа для меня

\n = 

\r = 
\t = 	
space =  

Вот пример того, как использовать их в XML

<KeyWord name="hello&#x9;" />
9 голосов
/ 09 октября 2017

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

Пробелы в Имена компонентов XML

Сводка: Пробельные символы не разрешены в именах элементов или атрибутов XML.

Вот основные кодовые точки Unicode, связанные с пробелами:

  • #x0009 ТАБЛИЦА ХАРАКТЕРОВ
  • #x0020 ПРОБЕЛ
  • #x000A LINE FEED (LF)
  • #x000D Возврат каретки (CR)
  • #x00A0 ПРОСТРАНСТВО БЕЗ ПЕРЕРЫВА
  • [#x2002-#x200A] EN ПРОСТРАНСТВО через ПРОСТРАНСТВО ВОЛОС
  • #x205F СРЕДНЕГО МАТЕМАТИЧЕСКОГО ПРОСТРАНСТВА
  • #x3000 ИДЕОГРАФИЧЕСКОЕ ПРОСТРАНСТВО

Нет этих кодовых точек разрешено W3C XML BNF для имен XML :

NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] |
                  [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] |
                  [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
                  [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] |
                  [#x10000-#xEFFFF]
NameChar      ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] |
                  [#x203F-#x2040]
Name          ::= NameStartChar (NameChar)*

Пробелы в Содержимое XML (не имена компонентов)

Резюме: Пробельные символы , конечно, разрешены в XML-контенте.

Все вышеперечисленные кодовые точки разрешены в XML-контенте W3C BNF XML для Char:

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
/* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */

Кодовые точки Unicode могут быть вставлены как символьные ссылки . Поддерживаются как десятичные &# десятичные ;, так и шестнадцатеричные &#x hex ; формы.

  • Шестнадцатеричное & # xA0; & # xA0; Десятичное число & # xA0; & # xA0; Имя Unicode
  • &#x09; & # xA0; & # xA0; & # xA0; или & # xA0; & # xA0; & # xA0; &#09; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; ТАБЛИЦА ХАРАКТЕРОВ
  • &#x0A; & # xA0; & # xA0; & # xA0; или & # xA0; & # xA0; & # xA0; * +1101 * & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; LINE FEED (LF)
  • &#x0D; & # xA0; & # xA0; & # xA0; или & # xA0; & # xA0; & # xA0; &#13; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; ВОЗВРАТ ЗАРЯДА (CR)
  • &#x20; & # xA0; & # xA0; & # xA0; или & # xA0; & # xA0; & # xA0; &#32; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; КОСМОС
  • &#xA0; & # xA0; & # xA0; & # xA0; или & # xA0; & # xA0; & # xA0; &#160; & # xA0; & # xA0; & # xA0; NO- ПРОРЫВ ПРОСТРАНСТВО
8 голосов
/ 05 февраля 2009

Вы не можете иметь пробелы и табуляции в теге (т.е. имя) XML-элементов, см. Спецификации: http://www.w3.org/TR/REC-xml/#NT-STag. Кроме буквенно-цифровых символов, двоеточия, подчеркивания, тире и точек допустимы в имени, и первая буква не может быть тире или точкой. Также разрешены определенные символы Юникода, без двойной проверки, я бы сказал, что это международные буквы.

2 голосов
/ 05 февраля 2009

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

1 голос
/ 10 декабря 2014

Для того, чтобы это работало, мне нужно закодировать шестнадцатеричное значение пространства в элементе CDATA xml, чтобы после анализа он складывался так же, как & # x20; в htm webgae & при просмотре в браузере просто отображается пробел !. (все вышеперечисленные идеи и ответы полезны)

<my-xml-element><![CDATA[&#x20;]]></my-xml-element>
0 голосов
/ 10 июня 2019

Недопустимые имена тегов XML Символы могут быть закодированы с использованием Unicode UCS-2. Это работает очень хорошо. Я использую его для создания XML, который превращается в json (JPath слаб по сравнению с XPath). Обратите внимание на обработку пробелов, (,) символов. Кодовая таблица Unicode UCS-2: http://www.columbia.edu/kermit/ucs2.html

        tag.Name = tag.Name.Replace(" ", "_x0020_");
        tag.Name = tag.Name.Replace("(", "_x0028_");
        tag.Name = tag.Name.Replace(")", "_x0029_");

XML:

  <Internal_x0020_Chargeback_x0020_ID>{CHARGEBACKCODE}</Internal_x0020_Chargeback_x0020_ID>
  <Bill_x0020_To>{CHARGEBACKCODE}</Bill_x0020_To>
  <Operator_x0020_or_x0020_Directly_x0020_Responsible_x0020_Individual_x0020__x0028_DRI_x0029_>zzz@yyy.gov</Operator_x0020_or_x0020_Directly_x0020_Responsible_x0020_Individual_x0020__x0028_DRI_x0029_>

преобразован в json через json.net:

    "Internal Chargeback ID": "{CHARGEBACKCODE}",
    "Bill To": "{CHARGEBACKCODE}",
    "Operator or Directly Responsible Individual (DRI)": "xxx@yyy.gov",
0 голосов
/ 06 ноября 2014

У меня возникла та же проблема, и ни один из приведенных выше ответов не решил ее, поэтому я попробовал что-то очень прямолинейное: я просто вставил свой strings.xml \n\t

Полная строка выглядит следующим образом <string name="premium_features_listing_3">- Automatische Aktualisierung der\n\tDatenbank</string>

Результат:

  • Automatische Aktualisierung der

    Datenbank

(без дополнительной строки между ними)

Может быть, это поможет другим. С уважением

...