Нотация комментариев с двумя звездочками в XML - PullRequest
1 голос
/ 11 ноября 2011

Допустимо ли использовать двойную звездочку для обозначения комментария строки в XML?Я часто вижу это в файлах XML, которые мне назначены для разбора.

Пример:

</someClosingTag>
** This is my line comment in an XML file.
<someOpeningTag>

Ответы [ 3 ]

2 голосов
/ 15 июня 2012

В стандарте XML нет ничего (http://www.w3.org/TR/xml/) о ** в качестве действительного комментария (правильная запись:

<!-- My comment -->

).

Однако,Я написал программу на C # .Net для анализа XML с использованием класса .Net 2.0 System.Xml.XmlReader, и он задушил ** значение, которое у меня было.Я не использовал это как комментарий;это было допустимое строковое значение.Проведя дальнейшие эксперименты, я обнаружил, что он задыхается от ЛЮБОГО символа звездочки, даже одного, например:

<?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 не может прочитать ее обратно).Во-вторых, после поиска в Google, я не могу найти кого-то еще в Интернете с этой проблемой.Я не могу себе представить, почему после всех этих лет никто никогда не использовал бы звездочку в значении XML и, следовательно, не сообщал об этом.

Обходной путь довольно прост - просто замените любой экземпляр звездочки на:

 &#42;

Это допустимо в соответствии со стандартом XML, и System.Xml.XmlReader не имеет проблем с ним.Если вы используете XmlTextWriter для генерации XML, вам понадобится пластырь для этого после свершившегося факта;вероятно,

Xml = Xml.Replace("*", "&#42;") 

будет в порядке, так как я не думаю, что звездочки будут использоваться для каких-либо других целей в XML.

0 голосов
/ 11 ноября 2011

Это не комментарий XML, но вполне может быть комментарием для приложения, которое обрабатывает содержимое XML.

0 голосов
/ 11 ноября 2011

Это неправильный способ написать комментарий в XML, как вы можете прочитать здесь: http://en.wikipedia.org/wiki/XML#Comments

Пример правильного комментария: <!-- no need to escape <code> & such in comments -->

...