我想创建一个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程序并获取标记的属性和内容。那么还有其他解决方法吗?
答案 0 :(得分:59)
你必须逃避
" to "
' to '
< to <
> to >
& to &
for xml。
答案 1 :(得分:19)
在XML属性中,您必须转义
" with "
< with <
& with &
如果用双引号("
)包装属性值,例如
<MyTag attr="If a<b & b<c then a<c, it's obvious"/>
表示标记MyTag
,其中包含带有文字attr
的属性If a<b & b<c then a<c, it's obvious
- 注意:无需使用'
来转义'
字符。
如果用单引号('
)包装属性值,那么你应该转义这些字符:
' with '
< with <
& with &
您可以按原样编写"
。
在属性文本中使用>
转义>
不是必需的,例如<a b=">"/>
是格式良好的XML。