0

###################

更新:感谢 user2622016,我认为“>”是有效的。

现在,在我的 c# 代码中,我有一个类,其中一个字段以“>”作为其值。我想将类序列化为 xml而不会将“>”转义为 >. 我正在使用 xmlSerializer 类。我的代码是:

 memoryStream = new System.IO.MemoryStream();
                System.Xml.XmlWriterSettings xmlWriterSettings = new System.Xml.XmlWriterSettings();
                xmlWriterSettings.Encoding = encoding;
                xmlWriterSettings.Indent = true;
                System.Xml.XmlWriter xmlWriter = XmlWriter.Create(memoryStream, xmlWriterSettings);
                Serializer.Serialize(xmlWriter, myObj);

任何想法如何在不使用“writeRaw”编写整个 XML 的情况下实现这一点(因为我希望整个类都被序列化)?

###################

">" 是 XML 中的有效字符吗?

简单的答案是否定的。基于我所知道的一切..(还有,XML 中的无效字符

但是当我尝试使用在线可用的 xml 验证工具进行检查时,例如:http : //www.w3schools.com/xml/xml_validator.asp,http: //www.xmlvalidation.com/

它说以下 xml 是有效的:

<?xml version="1.0" encoding="utf-8"?>
<object>
   <innerObj attrib="myAttrib">invalid char is > why valid</innerObj >
</object>

这怎么可能 ?

(我问的原因是,我试图将此 xml 作为 c# 中的一个类并对其进行序列化。显然它会转义“>”到"&gt;"..我不希望它发生..

关于这个“有效无效”字符以及如何解决我的序列化问题的任何解释?)

谢谢!!!

4

2 回答 2

2

只有和号 (&) 和左尖括号 (<) 字符不能在文本中使用。> '大于' 在 xml 文本字段中绝对可以,因为它不会使其模棱两可。请参阅第 2.4 章http://www.w3.org/TR/2008/REC-xml-20081126/#syntax

& 符号 (&) 和左尖括号 (<) 不得以其文字形式出现,除非用作标记分隔符,或者在注释、处理指令或 CDATA 部分中。如果在其他地方需要它们,则必须分别使用数字字符引用或字符串“&”和“<”对其进行转义。右尖括号 (>) 可以使用字符串 " &gt;"&gt;表示,并且为了兼容性,当它出现在内容中的字符串 " ]]> " 中时,必须使用 " " 或字符引用进行转义,当该字符串是不标记 CDATA 部分的结尾。

为什么 C# 总是将其转义为&gt?我不知道,也许是为了与以前的一些实现兼容?

根据标准,实施者可能会逃跑 >&gt好像他想逃跑一样,但只需要结合]]>

于 2015-01-05T08:42:56.240 回答
1

您可以使用 CDATA。尝试这个

<?xml version="1.0" encoding="utf-8"?>
<object>
  <innerObj attrib="myAttrib">invalid char is <![CDATA[>]]> why valid</innerObj >
</object>
于 2015-01-05T08:38:21.817 回答