Проблема с тегами XML html - PullRequest
       9

Проблема с тегами XML html

1 голос
/ 11 февраля 2011

Привет, у меня есть xml outout, сгенерированный php-скриптом:

<pre><code>
<menu>
<option id="67" ddmmyyyy="11 jan 2011" text="This is a text<p> ok</p> & not only a text!!" />
</menu>

XML возвращает ошибку, как правильно отформатировать ее?

Ответы [ 3 ]

1 голос
/ 11 февраля 2011

РЕДАКТИРОВАТЬ:

Как сказал Шикирю, вам следует использовать другой элемент для вашего текста, например:

    <pre><code>
    <menu>    
   <option id="67" ddmmyyyy="11 jan 2011">
      <text><![CDATA[This is a text<p> ok</p> & not only a text!!"]]></text>
   </option>
    </menu>
    

Вам нужно будет немного обновить способ извлечения информации, но это правильный способ сделать это.

Тег CDATA указывает анализатору XML игнорировать его содержимое. Когда вы обращаетесь к узлу, тег CDATA для переноса не будет присутствовать (т.е. вам не нужно ничего делать, чтобы удалить его).

Пример исходного кода (предварительное редактирование):

<pre><code>
<menu>    
<![CDATA[<option id="67" ddmmyyyy="11 jan 2011" text="This is a text<p> ok</p> & not only a text!!" />]]>
</menu>
0 голосов
/ 11 февраля 2011

Измените сценарий для создания XML, используя цепочку инструментов XML, такую ​​как DOM или Simple . Не пытайтесь построить это, смешивая последовательности.

0 голосов
/ 11 февраля 2011

Атрибуты XML не могут содержать разметку, они должны быть только текстовым содержимым.Это означает, что элементы, разделы CDATA, комментарии и т. Д. Не допускаются в значении атрибута.В противном случае XML будет не правильно сформирован, а синтаксические анализаторы отклонят ваш XML.

Если по какой-то причине вам нужно хранить данные XML в ваших атрибутах, вам нужно экранироватьразметка XML заменяет все символы < на объекты &lt;.Элемент вашего примера должен выглядеть следующим образом при экранировании значения атрибута.

<option id="67" ddmmyyyy="11 jan 2011" text="This is a text &lt;p&gt; ok&lt;/p&gt; &amp; not only a text!!" />

Также обратите внимание, что символ & не допускается как таковой, его всегда нужно экранировать как &amp;.Экранирование значения атрибута также означает, что синтаксический анализатор не возвращает свое содержимое в виде разметки, содержащей элементы, но возвращает его в виде текстовой строки, содержащей, например, < символы.Это необходимо учитывать в коде, который интерпретирует значение этого атрибута.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...