56

我想创建一个 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 程序并获取标签的属性和内容。那么还有其他解决方法吗?

4

2 回答 2

98

你将不得不逃脱

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

对于 xml。

于 2011-04-18T21:42:34.533 回答
32

在 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属性的含义标记- 注意:无需用于转义字符。attrIf a<b & b<c then a<c, it's obvious&apos;'

如果您将属性值用单引号 ( ') 括起来,那么您应该转义这些字符:

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

你可以"按原样写。不需要在属性文本中转义>with ,例如格式良好的 XML。&gt;<a b=">"/>

于 2015-09-15T14:29:21.873 回答