如何在xml中写'&'?

Gir*_*iri 2 c# xml xmltextwriter

我正在使用xmlTextWriter来创建xml.

writer.WriteStartElement("book"); 
writer.WriteAttributeString("author", "j.k.rowling"); 
writer.WriteAttributeString("year", "1990");
writer.WriteString("&");
writer.WriteEndElement();
Run Code Online (Sandbox Code Playgroud)

但是现在我需要写'&'但是xmlTextWriter会自动将这个写为"&"; 那么有什么工作要做吗?

我正在通过阅读doc文件来创建xml.所以如果我读" - "然后在xml中我需要写"&ndash";所以在写它时写的是"&"ndash.

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

psu*_*003 7

在正确的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
}
Run Code Online (Sandbox Code Playgroud)

正如您所发现的,另一个选择是使用WriteRaw()on XmlTextWriter(在C#中)的方法将编写一个未编码的字符串,但它并没有改变它完成后它不会是一个有效的XML文件的事实.

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

&ndash; 是一个HTML字符实体,因此通常不需要在XML中转义它.

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

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

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


Jen*_*rat 5

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

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