如何书写'&';在xml中

本文关键字:amp xml 书写 何书写 | 更新日期: 2023-09-27 18:00:27

我正在使用xmlTextWriter创建xml。

writer.WriteStartElement("book"); 
writer.WriteAttributeString("author", "j.k.rowling"); 
writer.WriteAttributeString("year", "1990");
writer.WriteString("&");
writer.WriteEndElement();

但现在我需要写"&amp但是xmlTextWriter会自动将这个写为"&那么,有什么办法可以做到这一点吗?

我正在通过读取文档文件来创建xml。所以,如果我读"-",那么在xml中我需要写"[amp]ndash";。所以在写作时,它被写成"&ndash。

因此,例如,如果我试图用文本good-bad编写一个节点,我实际上需要编写我的XML,比如<node>good&ndash;bad</node>。这是我项目的要求。

如何书写'&';在xml中

在正确的XML文件中,除非是转义符,否则不能有独立的&字符。因此,如果您需要一个XML节点来包含good&ndash;bad,则必须将其编码为good&amp;ndash;bad。没有解决方法,因为任何不同的东西都不是有效的XML。使其工作的唯一方法是按照您的意愿将XML文件写成纯文本,但XML解析器无法读取它,因为它不是正确的XML。

以下是我建议的解决方法的代码示例(您没有指定语言,所以我用C#向您展示,但Java应该有类似的东西):

using(var sw = new StreamWriter(stream))
{
    // other code to write XML-like data
    sw.WriteLine("<node>good&ndash;bad</node>");
    // other code to write XML-like data
}

正如您所发现的,另一种选择是在XmlTextWriter上使用WriteRaw()方法(在C#中)。它将写入一个未编码的字符串,但它不会改变这样一个事实,即当它完成时,它将不是一个有效的XML文件。

但正如我所提到的,如果您尝试使用XML Parser读取此内容,它将失败,因为&ndash不是一个有效的XML字符实体,因此它不是有效的XML。

&ndash;是一个HTML字符实体,因此通常不需要用XML对其进行转义。

在XML语言中,&是转义符,因此&amp;是&的适当字符串表示;。不能只使用&字符,因为&字符有一个特殊的含义,因此一个&字符会被解析器/误解

您将使用<,>看到类似的行为,",和'字符。所有字符在XML语言中都有意义,因此如果您需要在文档中将它们表示为文本。

这里引用了维基百科中XML(和HTML)中的所有字符实体。每个都将始终由转义符和名称(&gt;&lt;&quot;&apos;)表示

在XML中,&必须转义为&amp;&字符是为实体保留的,因此在其他情况下不允许使用。实体用于转义XML中具有特殊含义的字符。

另一个读取XML的软件必须再次对实体进行解码。<&lt;>&gt;或其他示例,诸如基于XML的HTML之类的一些其他语言提供了更多这样的语言。

我想你需要对它进行编码

colTest = "&" 
writer.WriteEncodedText(colTest)