Ошибка синтаксического анализа XML - C # - PullRequest
8 голосов
/ 01 мая 2010

В моем коде ошибка синтаксического анализа XML в строке 7, позиция 32, и я не совсем уверен, почему

Точный дамп ошибки

5/1/2010 10:21:42 AM
System.Xml.XmlException: An error occurred while parsing EntityName. Line 7, position 32.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.Throw(String res, Int32 lineNo, Int32 linePos)
   at System.Xml.XmlTextReaderImpl.HandleEntityReference(Boolean isInAttributeValue, EntityExpandType expandType, Int32& charRefEndPos)
   at System.Xml.XmlTextReaderImpl.ParseAttributeValueSlow(Int32 curPos, Char quoteChar, NodeData attr)
   at System.Xml.XmlTextReaderImpl.ParseAttributes()
   at System.Xml.XmlTextReaderImpl.ParseElement()
   at System.Xml.XmlTextReaderImpl.ParseElementContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace)
   at System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.Load(String filename)
   at Lookoa.LoadingPackages.LoadingPackages_Load(Object sender, EventArgs e) in C:\Users\Administrator\Documents\Visual Studio 2010\Projects\Lookoa\Lookoa\LoadingPackages.cs:line 30

Файл XML, обратите внимание, что это всего лишь пример, потому что я хочу, чтобы программа работала до того, как я начну заполнять этот репозиторий.

<repo>
<Packages>
    <TheFirstPackage id="00001" longname="Mozilla Firefox" appver="3.6.3" pkgver="0.01" description="Mozilla Firefox is a free and open source web browser descended from the Mozilla Application Suite and managed by Mozilla Corporation. A Net Applications statistic  put Firefox at 24.52% of the recorded usage share of web browsers as of March 2010[update], making it the second most popular browser in terms of current use worldwide after Microsoft's Internet Explorer." cat="WWW" rlsdate="4/8/10" pkgloc="http://google.com"/>
</Packages>
<categories>
    <WWW longname="World Wide Web" description="Software that's focus is communication or primarily uses the web for any particular reason."> </WWW>
    <Fun longname="Entertainment & Other" description="Music Players, Video Players, Games, or anything that doesn't fit in any of the other categories."> </Fun>
    <Work longname="Productivity" description="Application's commonly used for occupational needs or, stuff you work on"> </Work>
    <Advanced longname="System & Security" description="Applications that protect the computer from malware, clean the computer, and other utilities."> </Advanced>
</categories>
</repo>

Небольшая часть кода C #

//Loading the Package and Category lists
                //The info from them is gonna populate the listboxes for Category and Packages
                Repository.Load("repo.info");
                XmlNodeList Categories = Repository.GetElementsByTagName("categories");
                foreach (XmlNode Category in Categories)
                {
                    CategoryNumber++;
                    CategoryNames[CategoryNumber] = Category.Name;
                    MessageBox.Show(CategoryNames[CategoryNumber]);
                }

Messagebox.Show () просто для того, чтобы убедиться, что он получает правильные результаты

Ответы [ 2 ]

18 голосов
/ 01 мая 2010

Амперсанд имеет особое значение в XML. Вам необходимо изменить:

Entertainment & Other

для использования ссылки на сущность символа вместо этого символа:

Entertainment &amp; Other

То же самое относится к System & Security.

2 голосов
/ 01 мая 2010

В вашем xml '&' указан недопустимый символ.

Обновлено: замените его на &amp;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...