繁体   English   中英

在Java中将“ <”和“>”写入xml文件而不是<和>

[英]writing “<” and “>” to a xml file instead of &lt; and &gt; in java

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

...创建的xml具有; lt; 和; gt; 代替<>符号...

我想你的意思是&lt; &gt; 没错 这就是您以XML文本编写<> (尽管也可以使用>字面意义,请参见下文)。 它们被称为命名角色实体。

这个:

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

...定义其中包含内容“ 6 <7”的XML元素。

这个:

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

您也可以这样做:

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

如果我们假设el是您的元素,那么:从lxml import etree

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM