如何书写'&';在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();
但现在我需要写"&但是xmlTextWriter会自动将这个写为"&;那么,有什么办法可以做到这一点吗?
我正在通过读取文档文件来创建xml。所以,如果我读"-",那么在xml中我需要写"[amp]ndash";。所以在写作时,它被写成"&;ndash。
因此,例如,如果我试图用文本good-bad
编写一个节点,我实际上需要编写我的XML,比如<node>good–bad</node>
。这是我项目的要求。
在正确的XML文件中,除非是转义符,否则不能有独立的&
字符。因此,如果您需要一个XML节点来包含good–bad
,则必须将其编码为good&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–bad</node>");
// other code to write XML-like data
}
正如您所发现的,另一种选择是在XmlTextWriter
上使用WriteRaw()
方法(在C#中)。它将写入一个未编码的字符串,但它不会改变这样一个事实,即当它完成时,它将不是一个有效的XML文件。
但正如我所提到的,如果您尝试使用XML Parser读取此内容,它将失败,因为&ndash
不是一个有效的XML字符实体,因此它不是有效的XML。
–
是一个HTML字符实体,因此通常不需要用XML对其进行转义。
在XML语言中,&
是转义符,因此&
是&的适当字符串表示;。不能只使用&字符,因为&字符有一个特殊的含义,因此一个&字符会被解析器/误解
您将使用<,>看到类似的行为,",和'字符。所有字符在XML语言中都有意义,因此如果您需要在文档中将它们表示为文本。
这里引用了维基百科中XML(和HTML)中的所有字符实体。每个都将始终由转义符和名称(>
、<
、"
、'
)表示
在XML中,&
必须转义为&
。&
字符是为实体保留的,因此在其他情况下不允许使用。实体用于转义XML中具有特殊含义的字符。
另一个读取XML的软件必须再次对实体进行解码。<
的<
和>
的>
或其他示例,诸如基于XML的HTML之类的一些其他语言提供了更多这样的语言。
我想你需要对它进行编码
colTest = "&"
writer.WriteEncodedText(colTest)