写作"<"和">"到xml文件而不是<和>在java中

时间:2014-07-23 10:40:43

标签: java xml

我必须在xml文件中写几行,该文件应该包含<和>符号作为标记值的一部分。 我将它们设置在一个字符串中,该字符串包含一些文本以及<和>符号,并且在通过jaxb编组之后,创建的xml具有; lt;和;;而不是<和>符号。我尝试使用转义字符和ascii 60和62值将它们作为<和>但没有工作。任何人都可以为此提出一些解决方案。

3 个答案:

答案 0 :(得分:3)

  

...创建的xml有; lt;和;;而不是<>符号...

我认为您的意思是&lt;&gt;。这是对的。这就是你在XML文本中写<>的方式(尽管你也允许在字面上使用>,见下文)。他们称之为命名字符实体。

此:

<foo>6 &lt; 7</foo>

...定义一个内容为&#34; 6&lt; 7&#34;在它。

此:

<foo>6 < 7</foo>

是无法解析的无效XML。

字符实体的替代方法是使用CDATA部分:

<foo><![CDATA[6 < 7]]></foo>

<![CDATA[]]>之间的所有内容都被视为原始文本,而不是XML。但请注意,生成的XML DOM略有不同。 foo元素的值是CDATA部分,后者的值为"6 < 7"。所以它不那么直接。当您使用字符实体时,foo的值为"6 < 7"(没有任何插入位)。

从技术上讲,如果您愿意,可以直接在XML中编写>。这两行定义完全相同:

<foo>7 &gt; 6</foo>
<foo>7 > 6</foo>

两者都有效,解析时得到的数据完全相同。但你通常会看到第一个而不是第二个。


旁注:&也必须使用字符实体编写,因为&是字符实体的开头。因此,要在文本中添加&,请使用&amp;

<foo>Jones &amp; Cooper Co.</foo>

答案 1 :(得分:0)

你也可以这样做:

<xml>
 <![CDATA[
   <data>sdsjddjdsdjs</data>
 ]]>
</xml>

答案 2 :(得分:0)

如果我们假设el是你的元素那么: 来自lxml import etree

el.text = etree.CDATA('a string')

参考:http://lxml.de/api/lxml.etree.CDATA-class.html