Как включить &, <,> и т. Д. В значения атрибутов XML - PullRequest
38 голосов
/ 19 апреля 2011

Я хочу создать файл XML, который будет использоваться для хранения структуры Java-программы. Я могу успешно анализировать программу Java и создавать теги по мере необходимости. Проблема возникает, когда я пытаюсь включить исходный код в свои теги, поскольку исходный код Java может использовать огромное количество ссылок на сущности и зарезервированных символов, таких как &, <, >, &. Я не могу создать действительный XML.

Мой XML должен выглядеть так:

<?xml version="1.0"?>
<prg name="prg_name">
  <class name= "class_name>
    <parent>parent class</parent>
      <interface>Interface name</interface>
.
.
.
      <method name= "method_name">
        <statement>the ordinary java statement</statement>
        <if condition="Conditional Expression">
          <statement> true statements </statement>
        </if>
        <else>
          <statement> false statements </statement>
        </else>
        <statement> usual control statements </statement>
 .
 .
 .
      </method>
    </class>
 .
 .
 .
 </prg>

Подобно этому, но проблема в том, что условные выражения if или другие операторы содержат много & или других зарезервированных символов, что препятствует проверке XML. Поскольку все эти данные (исходный код) предоставлены пользователем, я почти не контролирую их. Спасение персонажей будет очень дорогостоящим с точки зрения времени.

Я могу использовать CDATA для экранирования текста элемента, но его нельзя использовать для значений атрибутов, содержащих условные выражения. Я использую Antlr грамматику Java для анализа программы Java и получения атрибутов и содержимого для тегов. Так есть ли другой обходной путь для этого?

Ответы [ 2 ]

68 голосов
/ 19 апреля 2011

Вам придется сбежать

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

для xml.

20 голосов
/ 15 сентября 2015

В атрибутах XML вы должны экранировать

" with &quot;
< with &lt;
& with &amp;

, если вы заключаете значения атрибута в двойные кавычки ("), например,

<MyTag attr="If a&lt;b &amp; b&lt;c then a&lt;c, it's obvious"/>

означает тег MyTag с атрибутом attr с текстом If a<b & b<c then a<c, it's obvious - примечание: нет необходимости использовать &apos; для экранирования ' символа.

Если вы оберните значения атрибута в одинарные кавычки ('), вам следует экранировать следующие символы:

' with &apos;
< with &lt;
& with &amp;

и вы можете написать " как есть.Экранирование > с &gt; в тексте атрибута не требуется , например, <a b=">"/> - это правильно сформированный XML.

...