使用双星号表示XML中的行注释是否有效?我在分配给解析的XML文件中看到了很多。
示例:
</someClosingTag>
** This is my line comment in an XML file.
<someOpeningTag>
答案 0 :(得分:2)
XML标准(http://www.w3.org/TR/xml/)中没有任何内容关于**作为有效注释(正确的注释是:
<!-- My comment -->
)。
但是,我编写了一个C#.Net程序来使用.Net 2.0 System.Xml.XmlReader类来解析XML,并且它在我拥有的**值上被阻塞了。我没有用它作为评论;这是一个合法的字符串值。在做了进一步的实验之后,我发现它在任何星号字符上都会被窒息,甚至是一个星号,就像这样:
<?xml version="1.0" standalone="yes"?><HVACRJob Version="32">5 * 3 = 15</HVACRJob>
产生的例外是:
[XmlException: Unexpected end of file has occurred. The following elements are not closed: HVACRJob. Line 1, position 25.]
System.Xml.XmlTextReaderImpl.Throw(Exception e) +95
System.Xml.XmlTextReaderImpl.ThrowUnclosedElements() +354
System.Xml.XmlTextReaderImpl.ParseElementContent() +5088529
System.Xml.XmlReader.ReadToFollowing(String name) +92
MyApp.ParseXmlBytesIntoDictionary(Dictionary`2 Dict, Byte[] ItemAsUncompressedXmlBytes, Boolean AllowOverwrite) in c:\dev\bin\MyApp.aspx.cs:464
MyApp.CreateDictionaryFromXml(String Xml, Int32& Version) in c:\dev\bin\MyApp.aspx.cs:447
MyApp.GetEmailFromXml(String Xml) in c:\dev\bin\MyApp.aspx.cs:402
MyApp.btnSubmit_Click(Object sender, EventArgs e) in c:\dev\bin\MyApp.aspx.cs:2155
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +115
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +140
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2981
这里有两件奇怪的事。首先,当我使用XmlTextWriter生成XML时,星号不会以任何方式分隔(但XmlReader无法将其读回)。其次,谷歌搜索后,我找不到网络上有这个问题的其他人。我无法想象为什么在这些年之后,没有人会在XML值中使用星号,因此不会报告这一点。
解决方法非常简单 - 只需用星号替换星号的任何实例:
*
根据XML标准,这是合法的,System.Xml.XmlReader没有任何问题。如果您正在使用XmlTextWriter生成XML,那么事后您将不得不为此做一个创可贴。可能
Xml = Xml.Replace("*", "*")
没关系,因为我认为星号不会用于XML中的任何其他用途。
答案 1 :(得分:0)
这不是用XML编写注释的正确方法,您可以在此处阅读:http://en.wikipedia.org/wiki/XML#Comments
有效评论的示例:
<!-- no need to escape <code> & such in comments -->
答案 2 :(得分:0)
它不是XML注释,但很可能是对处理XML内容的应用程序的注释。