###################
更新:感谢user2622016我重新定义了“>”是有效的。
现在,在我的c#代码中,我有一个类,其中一个字段有“>”作为它的价值。
我想将类序列化为xml WITHOUT “>”被转移到>
。
我正在使用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中的有效字符?
简单的答案是否定的。基于我所知道的一切...... (另外,Invalid Characters in 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;”转义为">"
。我不希望它发生..
有关此“有效无效”字符的任何解释以及如何解决我的序列化问题? )
感谢!!!
答案 0 :(得分:2)
在文本中不能使用&符号(&amp;)和左尖括号(&lt;)字符。 &gt; '大于'在xml文本字段中绝对可以,因为它不会使它模糊不清。 见第2.4章http://www.w3.org/TR/2008/REC-xml-20081126/#syntax
&符号(&amp;)和左尖括号(&lt;)不得 以字面形式出现,除非用作标记分隔符, 或在评论,处理指令或CDATA部分内。如果 它们在别处需要,必须使用数字进行转义 字符引用或字符串“&amp;”和“&lt;” 分别。 可以使用以下来表示右尖括号(&gt;) 字符串“
>
”,并且为了兼容性,必须使用其中一个进行转义 “>
”或字符串参考出现在字符串“]]&gt;中 “在内容中,当该字符串未标记CDATA的结尾时 部分。
为什么C#总是以>
的形式将其转义?我不知道,也许是为了与以前的一些实现兼容?
根据标准实现者可以逃脱&gt;作为>
,如果他愿意,但只需要合并]]>
答案 1 :(得分:1)
您可以使用CDATA。试试这个
<?xml version="1.0" encoding="utf-8"?>
<object>
<innerObj attrib="myAttrib">invalid char is <![CDATA[>]]> why valid</innerObj >
</object>