正在关闭标签“>” xml中的有效字符?

时间:2015-01-05 08:30:23

标签: c# xml validation serialization invalid-characters

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

更新:感谢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.asphttp://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;”转义为"&gt;"。我不希望它发生..

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

感谢!!!

2 个答案:

答案 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;,并且为了兼容性,必须使用其中一个进行转义   “&gt;”或字符串参考出现在字符串“]]&gt;中   “在内容中,当该字符串未标记CDATA的结尾时   部分。

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

根据标准实现者可以逃脱&gt;作为&gt,如果他愿意,但只需要合并]]>

答案 1 :(得分:1)

您可以使用CDATA。试试这个

<?xml version="1.0" encoding="utf-8"?>
<object>
  <innerObj attrib="myAttrib">invalid char is <![CDATA[>]]> why valid</innerObj >
</object>
相关问题