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

时间:2011-04-18 21:40:33

标签: java xml entityreference xml-attribute

我想创建一个XML文件,用于存储Java程序的结构。我能够成功解析Java程序并根据需要创建标记。当我尝试在源代码中包含源代码时会出现问题,因为Java源代码可能使用大量实体引用和保留字符,如&<>,{ {1}}。我无法创建有效的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 个答案:

答案 0 :(得分:59)

你必须逃避

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

for xml。

答案 1 :(得分:19)

在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。