Действительно ли возможно иметь текст HTML или CDATA в атрибуте XML?

Не похоже, что это один из анимативных свойств.

См. полный список:

http://developer.apple.com/library /ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html

29
задан Boon 17 August 2009 в 18:13
поделиться

5 ответов

Если атрибут не является токенизированным или перечислимым типом, он обрабатывается как CDATA. Подробную информацию о том, как обрабатывается атрибут, можно найти в Extensible Markup Language (XML) 1.0 (пятое издание) .

3.3.1 Типы атрибутов

Типы атрибутов XML бывают трех видов: строковый тип, набор токенизированных типов и перечислимые типы. Тип строки может принимать в качестве значения любую буквальную строку; токенизированные типы более ограничены. Ограничения допустимости, указанные в грамматике, применяются после того, как значение атрибута было нормализовано, как описано в 3.3.3 Нормализация значения атрибута.

[54]  AttType :: = StringType | TokenizedType | EnumeratedType
[55] StringType :: = 'CDATA'
[56] TokenizedType :: = 'ID' [VC: ID]
 [VC: один идентификатор для каждого типа элемента]
 [VC: ID атрибута по умолчанию]
| 'IDREF' [VC: IDREF]
| 'IDREFS' [VC: IDREF]
| "ENTITY" [VC: название объекта]
| "ENTITIES" [VC: название объекта]
| "NMTOKEN" [VC: Name Token]
| "NMTOKENS" [VC: Name Token]

...

3.3.3 Нормализация значения атрибута

Перед тем, как значение атрибута будет передано в приложение или проверено на достоверность, процессор XML ДОЛЖЕН нормализовать значение атрибута, применяя алгоритм ниже, или используя какой-либо другой метод, такой, чтобы значение, передаваемое в приложение, было таким же, как значение, созданное алгоритмом.

  1. Все разрывы строк ДОЛЖНЫ быть нормализованы на входе в #xA, как описано в 2.11 Конец строки Обработка , поэтому остальная часть этого алгоритма работает с нормализованным таким образом текстом.
  2. Начните с нормализованного значения, состоящего из пустой строки.
  3. Для каждого символа, ссылки на сущность или ссылки на символ в ненормализованном атрибуте value, начиная с первого и заканчивая последним, выполните следующие действия: нормализованное значение содержит сам ссылочный символ (#xD, #xA или # x9). Это контрастирует со случаем, когда ненормализованное значение содержит символ пробела (не ссылка), который заменяется символом пробела (# x20) в нормализованном значении, а также отличается от случая, когда ненормализованное значение содержит ссылку на объект, чья текст замены содержит символ пробела; при рекурсивной обработке символ пробела заменяется символом пробела (# x20) в нормализованном значении.

    Все атрибуты, для которых не было прочитано объявление, ДОЛЖНЫ обрабатываться непроверяющим процессором, как если бы они были объявлены CDATA .

    Это ошибка, если значение атрибута содержит ссылку на объект, для которого не было прочитано объявление.

9
ответ дан 27 November 2019 в 23:49
поделиться

Нет, CDATA не может быть значением атрибута. Он может быть только внутри элемента.

24
ответ дан JMP 14 October 2019 в 08:04
поделиться

CDATA, к сожалению, сказать здесь неоднозначно. Существуют «Разделы CDATA» и «CDATA Тип атрибута» .

Ваше значение атрибута может иметь тип CDATA с «Типом атрибута CDATA».

Вот XML, который содержит «Раздел CDATA» ( aka. CDSect):

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<elemke>
<![CDATA[
foo
]]>
</elemke>

Вот XML, который содержит «Тип атрибута CDATA» (как AttType):

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE elemke [
<!ATTLIST brush wood CDATA #REQUIRED>
]>

<elemke>
<brush wood="guy&#xA;threep"/>
</elemke>

Вы не можете использовать «Раздел CDATA» для атрибута Значение: неверно: <brush wood=<![CDATA[foo]]>/>

Вы можете использовать «Тип атрибута CDATA» для своих атрибутов Тип, я думаю, что это действительно то, что происходит в обычном случае, и значение вашего атрибута на на самом деле CDATA: для элемента, подобного <brush wood="guy&#xA;threep"/>, в необработанной двоичной байтовой строке, которая файл .xml, у вас есть guy&#xA;threep, однако, когда файл обрабатывается, значение атрибута в памяти будет будет

guy
threep
<час>

Ваша проблема может заключаться в 1) создание правильного XML-файла и 2) настройка «XML-процессора» для получения желаемого результата.

Например, в случае, если вы пишете необработанный двоичный файл в качестве вашего xml вручную , вам нужно поместить эти escape-значения в часть значения атрибута в необработанном файле, как я написал здесь <brush wood="guy&#xA;threep"/>, вместо <brush wood="guy (новая строка) threep"/>

Затем анализ фактически даст вам новую строку, я попробовал это с процессором.

Вы можете попробовать его с таким процессором, как saxon, или для эксперимента бедняка, например с браузером, открыв XML в Firefox и , скопировав значение в текстовый редактор - Firefox отобразил ] символ новой строки как пробел, но при копировании строки в текстовый редактор символ новой строки. (Возможно, с более подходящим процессором вы могли бы сразу сохранить прямой вывод.)

Теперь «единственное», что вам нужно сделать, это убедиться, что вы правильно обрабатываете этот CDATA. Например, если у вас есть таблица стилей XSL, которая выдаст вам html, вы можете использовать что-то вроде этого .xsl для такого xml:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet  version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template name="split">
  <xsl:param name="list"      select="''" />
  <xsl:param name="separator" select="'&#xA;'" />
  <xsl:if test="not($list = '' or $separator = '')">
    <xsl:variable name="head" select="substring-before(concat($list, $separator), $separator)" />
    <xsl:variable name="tail" select="substring-after($list, $separator)" />

    <xsl:value-of select="$head"/>
    <br/><xsl:text>&#xA;</xsl:text>
    <xsl:call-template name="split">
        <xsl:with-param name="list"      select="$tail" />
        <xsl:with-param name="separator" select="$separator" />
    </xsl:call-template>
  </xsl:if>
</xsl:template>


<xsl:template match="brush">
  <html>
  <xsl:call-template name="split">
    <xsl:with-param name="list" select="@wood"/>
  </xsl:call-template>
  </html>
</xsl:template>

</xsl:stylesheet>

Какой в ​​браузере или с процессором, подобным saxon использование java -jar saxon9he.jar -s:eg2.xml -xsl:eg2.xsl -o:eg2.html saxon home edition 9.5 приведет к созданию html-подобной вещи:

<html>guy<br>
   threep<br>

</html>  

, которая будет выглядеть так в браузере:

guy
threep

Здесь Я использую рекурсивный шаблон 'split' из Tomalak , благодаря Mads Hansen , потому что мой целевой процессор не поддерживает ни string-join , ни tokenize ], которые являются только версией 2.0.

5
ответ дан Community 14 October 2019 в 08:04
поделиться

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

<code text="&lt;a href=&quot;/&quot;&gt;">

Это даст атрибуту text значение . Обратите внимание, что это простой текст, поэтому, если вы хотите рассматривать его как HTML, вам придется самостоятельно запустить эту строку через анализатор HTML. XML DOM не будет анализировать атрибут текст за вас.

13
ответ дан 27 November 2019 в 23:49
поделиться

Если атрибут не является токенизированным или нумерованным типом, он обрабатывается как CDATA. Подробные сведения о том, как обрабатывается атрибут, можно найти в Extensible Markup Language (XML) 1.0 (пятое издание) .

3.3.1 Типы атрибутов

Типы атрибутов XML бывают трех видов: строковый тип, набор токенизированных типов и перечислимые типы. Тип строки может принимать в качестве значения любую буквальную строку; токенизированные типы более ограничены. Ограничения допустимости, указанные в грамматике, применяются после того, как значение атрибута было нормализовано, как описано в 3.3.3 Нормализация значения атрибута.

[54]  AttType :: = StringType | TokenizedType | EnumeratedType
[55] StringType :: = 'CDATA'
[56] TokenizedType :: = 'ID' [VC: ID]
 [VC: один идентификатор для каждого типа элемента]
 [VC: ID атрибута по умолчанию]
| 'IDREF' [VC: IDREF]
| 'IDREFS' [VC: IDREF]
| "ENTITY" [VC: название объекта]
| "ENTITIES" [VC: название объекта]
| "NMTOKEN" [VC: Name Token]
| "NMTOKENS" [VC: Name Token]

...

3.3.3 Нормализация значения атрибута

Перед тем, как значение атрибута будет передано в приложение или проверено на допустимость, процессор XML ДОЛЖЕН нормализовать значение атрибута, применяя алгоритм ниже, или используя какой-либо другой метод, такой, чтобы значение, передаваемое в приложение, было таким же, как значение, созданное алгоритмом.

  1. Все разрывы строк ДОЛЖНЫ быть нормализованы на входе в #xA, как описано в 2.11 Конец строки Обработка , поэтому остальная часть этого алгоритма работает с нормализованным таким образом текстом.
  2. Начните с нормализованного значения, состоящего из пустой строки.
  3. Для каждого символа, ссылки на сущность или ссылки на символ в ненормализованном атрибуте value, начиная с первого и заканчивая последним, выполните следующие действия: нормализованное значение содержит сам ссылочный символ (#xD, #xA или # x9). Это контрастирует со случаем, когда ненормализованное значение содержит символ пробела (не ссылка), который заменяется символом пробела (# x20) в нормализованном значении, а также отличается от случая, когда ненормализованное значение содержит ссылку на объект, чья текст замены содержит символ пробела; при рекурсивной обработке символ пробела заменяется символом пробела (# x20) в нормализованном значении.

    Все атрибуты, для которых не было прочитано объявление, ДОЛЖНЫ обрабатываться непроверяющим процессором, как если бы они были объявлены CDATA .

    Это ошибка, если значение атрибута содержит ссылку на объект, для которого не было прочитано объявление. Т.е. используйте & amp; & lt; & gt; & quot; & apos; , так он не будет рассматриваться как разметка внутри вашей разметки.

2
ответ дан 27 November 2019 в 23:49
поделиться
Другие вопросы по тегам:

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