如何在XML属性值中包含&,<,>等

Sud*_*udh 40 java xml xml-attribute entityreference

我想创建一个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>
Run Code Online (Sandbox Code Playgroud)

像这样,但问题是条件表达式if或其他语句中有很多&或其他保留符号阻止XML得到验证.由于所有这些数据(源代码)都是由用户提供的,因此我无法控制它.逃避角色在时间上将是非常昂贵的.

我可以使用CDATA来转义元素文本,但它不能用于包含条件表达式的属性值.我正在使用Antlr Java语法来解析Java程序并获取标记的属性和内容.那么还有其他解决方法吗?

Bal*_*a R 73

你将不得不逃脱

" to  &quot;
' to  &apos;
< to  &lt;
> to  &gt;
& to  &amp;
Run Code Online (Sandbox Code Playgroud)

对于xml.


izo*_*fif 21

在XML属性中,您必须转义

" with &quot;
< with &lt;
& with &amp;
Run Code Online (Sandbox Code Playgroud)

如果用双引号(")包装属性值,例如

<MyTag attr="If a&lt;b &amp; b&lt;c then a&lt;c, it's obvious"/>
Run Code Online (Sandbox Code Playgroud)

MyTag含有attr带文本属性的含义标记If a<b & b<c then a<c, it's obvious- 注意:无需使用&apos;转义'字符.

如果用单引号(')包装属性值,则应该转义这些字符:

' with &apos;
< with &lt;
& with &amp;
Run Code Online (Sandbox Code Playgroud)

你可以"按原样写作.逃逸>&gt;的属性文字不要求,例如<a b=">"/>是格式良好的XML.

  • 为什么XML要求在属性值的情况下转义引号内的特殊字符?只需要引用"或"......该字符串中的任何其他内容都可以简单地视为内容! (8认同)
  • 这比接受的答案更正确,因为它提供了最小的必要转义集. (3认同)
  • 我想这是对编写糟糕的 XML 解析器和/或不正确的 XML 的预先警告。例如,如果省略属性的引号 (`&lt;tag attr=value&gt;&lt;/tag&gt;`)。 (2认同)