Link to home
Start Free TrialLog in
Avatar of ziorrinfotech
ziorrinfotech

asked on

XMlreader object is not working reading nested xml file in C#

I have written a function to read one xml file. the xml file has  Articles and inside article it has article version nodes. and inside article version there are more nodes.
Now i am looping  the article and article version  nodes to fetch the nodes values inside article version node.
but when i run the function then it only runs  one time but i have three article version nodes inside a article node.

Anybody could help me out here.
I am giving the xml file and the function code which i wrote.

here is my xml file
<?xml version="1.0" encoding="ISO-8859-15" ?> 
<zwischenstruktur-faq>
<!-- topics  --> 
 <topics>
 <!-- topic   --> 
 <topic pkey="1" version="15" id="0014215a-cced-4813-b8be-86bb7cc49034" name="02" parent_pkey="0" child_index="0">
  <topic_content pkey="1" title="02" locale_pkey="1" topic_pkey="1" /> 
  <topic_content pkey="2" title="02" locale_pkey="3" topic_pkey="1" /> 
  <topic_content pkey="3" title="02" locale_pkey="2" topic_pkey="1" /> 
  <topic_content pkey="4" title="02" locale_pkey="4" topic_pkey="1" /> 
 <!-- Eintraege  --> 
  <issues /> 
  </topic>
 <!-- topic   --> 
 <topic pkey="2" version="5" id="72f0665e-0eaf-4117-adee-2c9868b1dd54" name="10" parent_pkey="1" child_index="0">
  <topic_content pkey="5" title="10" locale_pkey="3" topic_pkey="2" /> 
  <topic_content pkey="6" title="10" locale_pkey="1" topic_pkey="2" /> 
  <topic_content pkey="7" title="10" locale_pkey="2" topic_pkey="2" /> 
  <topic_content pkey="8" title="10" locale_pkey="4" topic_pkey="2" /> 
 <!-- Eintraege  --> 
 <issues>
 <!-- Eintrag  --> 
 <issue pkey="2031" version="1" id="62d08607-de1f-41d8-a015-4b285a73aa05" name="Gerät - Mobile Viren" editor="Hans-Ulrich.Nyfeler@swisscom.com">
 <!-- Artikel   --> 
 <articles>
 <!-- Der Artikel  --> 
 <article pkey="2031" articleType="1" id="aa188672-2a5f-4e92-a6f2-afaed45d867e" version="118" offlineStatus="0" state_pkey="2031" releasedVersion_pkey="54032" currentVersion_pkey="54032">
 <!-- Version des Artikels   --> 
 <article_version pkey="15881" name="default" state="STATE_EDITING" article_pkey="2031" change_pkey="18128">
 <!-- Zielgruppen fuer welche dieser Artikel freigegeben ist   --> 
 <project_audiences>
 <!-- Zielgruppe   --> 
  <project_audience pkey="1" id="31e1a8c5-6a52-417c-a227-39fd08f25779" name="RCC-ODM" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="2" id="a57167be-c6fc-41fb-ad7e-b70d474fc77a" name="IC-SPC" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="3" id="894ec230-0296-4378-a9a2-2a837113c89d" name="IC-MNP" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="4" id="5d07218c-b65a-4952-bd82-55d456d046e9" name="Kunden" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="5" id="94a9e475-15c1-4084-b198-c538cc78e3d9" name="CTC-CCU" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="6" id="9bad5bda-0010-42c9-b2c1-1b0af9babaa9" name="RES-7" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="7" id="8fb8ceb7-2a4e-49b4-ba49-39e1ca88dbee" name="IC-RTD" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="8" id="977d191b-196b-4212-b635-0a511949083f" name="RES-8" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="9" id="adc0ef43-5270-4320-b306-96d032884eef" name="RES-5" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="10" id="c9e4da47-3cf0-40a1-aa2c-1c154e871183" name="RES-6" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="11" id="37ac3fd6-2061-4617-8524-b946f6b36988" name="CTC-TCU" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
 <project_audience pkey="12" id="06cfadcc-0144-4e1d-a51d-1c0699ffc5d0" name="IC-CLM" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audiene pkey="13" id="ac300402-cb0e-44f2-8d95-74d018f2bffa" name="IC-SDK" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="14" id="99d08c41-f0ed-4b8f-b7e5-a5e957c2aaf8" name="RCC" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="15" id="9b0f7102-9b19-475c-a135-7aa7e77f1d4b" name="CTC-COC" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="16" id="c08ae1cb-df65-4489-ad79-4273aac8bb87" name="RES-3" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="17" id="3bb2645c-4588-4aff-ac3b-a25658364394" name="RES-4" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="18" id="83915316-4fca-4c82-836a-6cc4d0c3f2ec" name="RES-1" defaultAudience="0" /> 
 <!-- Zielgruppe  --> 
  <project_audience pkey="19" id="cad3fe0b-c7d2-44d1-a4bc-f04df1ff602b" name="RES-2" defaultAudience="0" /> 
  </project_audiences>
 <!-- Artikelinhalte   --> 
 <article_contents>
 <!-- Artikelinhalt in einer bestimmten Sprache   --> 
 <article_content pkey="13851" title="default" translated="0" answer_pkey="0" question_pkey="0" locale_pkey="2">
 <!-- Dokumente - Fragen und Antworten  --> 
  <document_tables /> 
 <!-- Dateianhaenge zum Artikel    --> 
  <attachments /> 
  </article_content>
  </article_contents>
  </article_version>
 <!-- Version des Artikels   --> 
 <article_version pkey="15882" name="default" state="STATE_EDITING" article_pkey="2031" change_pkey="18129">
 <!-- Zielgruppen fuer welche dieser Artikel freigegeben ist   --> 
 <project_audiences>
 <!-- Zielgruppe   --> 
  <project_audience pkey="1" id="31e1a8c5-6a52-417c-a227-39fd08f25779" name="RCC-ODM" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="2" id="a57167be-c6fc-41fb-ad7e-b70d474fc77a" name="IC-SPC" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="3" id="894ec230-0296-4378-a9a2-2a837113c89d" name="IC-MNP" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="4" id="5d07218c-b65a-4952-bd82-55d456d046e9" name="Kunden" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="5" id="94a9e475-15c1-4084-b198-c538cc78e3d9" name="CTC-CCU" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="6" id="9bad5bda-0010-42c9-b2c1-1b0af9babaa9" name="RES-7" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="7" id="8fb8ceb7-2a4e-49b4-ba49-39e1ca88dbee" name="IC-RTD" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="8" id="977d191b-196b-4212-b635-0a511949083f" name="RES-8" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="9" id="adc0ef43-5270-4320-b306-96d032884eef" name="RES-5" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="10" id="c9e4da47-3cf0-40a1-aa2c-1c154e871183" name="RES-6" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="11" id="37ac3fd6-2061-4617-8524-b946f6b36988" name="CTC-TCU" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="12" id="06cfadcc-0144-4e1d-a51d-1c0699ffc5d0" name="IC-CLM" defaultAudience="1" /> 
 <!-- Zielgruppe  --> 
  <project_audience pkey="13" id="ac300402-cb0e-44f2-8d95-74d018f2bffa" name="IC-SDK" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="14" id="99d08c41-f0ed-4b8f-b7e5-a5e957c2aaf8" name="RCC" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="15" id="9b0f7102-9b19-475c-a135-7aa7e77f1d4b" name="CTC-COC" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="16" id="c08ae1cb-df65-4489-ad79-4273aac8bb87" name="RES-3" defaultAudience="0" /> 
 <!-- Zielgruppe   -->
   <project_audience pkey="17" id="3bb2645c-4588-4aff-ac3b-a25658364394" name="RES-4" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="18" id="83915316-4fca-4c82-836a-6cc4d0c3f2ec" name="RES-1" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="19" id="cad3fe0b-c7d2-44d1-a4bc-f04df1ff602b" name="RES-2" defaultAudience="0" /> 
  </project_audiences>
 <!-- Artikelinhalte   --> 
 <article_contents>
 <!-- Artikelinhalt in einer bestimmten Sprache  --> 
 <article_content pkey="13852" title="Gerät  Mobile Viren" translated="0" answer_pkey="9881" question_pkey="9882" locale_pkey="2">
 <!-- Dokumente - Fragen und Antworten   --> 
 <document_tables>
 <!-- Dokument - Frage bzw. Antwort  --> 
  <document_table pkey="9881" content="Mobile Viren können Daten (z.B. Adressbuchdaten) auf einem Gerät ausspionieren, verändern und löschen. Es ist möglich, dass sich Viren auf Geräten einnisten und Funktionen ausführen, die der Kunde nicht wünscht. Viren können z.B. SMS/MMS versenden oder Gespräche aufbauen. Für den Kunden können dadurch ungewollte Zusatzkosten entstehen. Viren können Bildschirme verändern und Geräte blockieren. Sie können auch der Grund dafür sein, dass der Akku innert kürzester Zeit leer ist. Gesamthaft sind zwar ca. 100 Viren bekannt, bislang treten aber nur selten Virenfälle auf. Die bekannten Viren befallen Endgeräte vor allem via Bluetooth und vereinzelt auch via MMS. Es sind nur Geräte mit den Betriebssystemen Mobile Windows und Symbian betroffen (Businessgeräte, sprich Smartphones und PDA's), da auf Smartphones und PDAs auch Programme installiert und betrieben werden können. Bei allen anderen Geräten konnten bis heute keine Viren entdeckt werden. Einfache mobile Endgeräte für die Sprachdienste gelten als sicher." /> 
  </document_tables>
 <!-- Dateianhaenge zum Artikel   --> 
  <attachments /> 
  </article_content>
  </article_contents>
  </article_version>
 <!-- Version des Artikels   --> 
 <article_version pkey="15883" name="default" state="STATE_EDITING" article_pkey="2031" change_pkey="18130">
 <!-- Zielgruppen fuer welche dieser Artikel freigegeben ist   --> 
 <project_audiences>
 <!-- Zielgruppe   --> 
  <project_audience pkey="1" id="31e1a8c5-6a52-417c-a227-39fd08f25779" name="RCC-ODM" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="2" id="a57167be-c6fc-41fb-ad7e-b70d474fc77a" name="IC-SPC" defaultAudience="1" /> 
 <!-- Zielgruppe  --> 
  <project_audience pkey="3" id="894ec230-0296-4378-a9a2-2a837113c89d" name="IC-MNP" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="4" id="5d07218c-b65a-4952-bd82-55d456d046e9" name="Kunden" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="5" id="94a9e475-15c1-4084-b198-c538cc78e3d9" name="CTC-CCU" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="6" id="9bad5bda-0010-42c9-b2c1-1b0af9babaa9" name="RES-7" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="7" id="8fb8ceb7-2a4e-49b4-ba49-39e1ca88dbee" name="IC-RTD" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="8" id="977d191b-196b-4212-b635-0a511949083f" name="RES-8" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="9" id="adc0ef43-5270-4320-b306-96d032884eef" name="RES-5" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="10" id="c9e4da47-3cf0-40a1-aa2c-1c154e871183" name="RES-6" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="11" id="37ac3fd6-2061-4617-8524-b946f6b36988" name="CTC-TCU" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="12" id="06cfadcc-0144-4e1d-a51d-1c0699ffc5d0" name="IC-CLM" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="13" id="ac300402-cb0e-44f2-8d95-74d018f2bffa" name="IC-SDK" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="14" id="99d08c41-f0ed-4b8f-b7e5-a5e957c2aaf8" name="RCC" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="15" id="9b0f7102-9b19-475c-a135-7aa7e77f1d4b" name="CTC-COC" defaultAudience="1" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="16" id="c08ae1cb-df65-4489-ad79-4273aac8bb87" name="RES-3" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="17" id="3bb2645c-4588-4aff-ac3b-a25658364394" name="RES-4" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="18" id="83915316-4fca-4c82-836a-6cc4d0c3f2ec" name="RES-1" defaultAudience="0" /> 
 <!-- Zielgruppe   --> 
  <project_audience pkey="19" id="cad3fe0b-c7d2-44d1-a4bc-f04df1ff602b" name="RES-2" defaultAudience="0" /> 
 </project_audiences>
 <!-- Artikelinhalte  --> 
 <article_contents>
 <!-- Artikelinhalt in einer bestimmten Sprache   --> 
 <article_content pkey="13852" title="Gerät  Mobile Viren" translated="0" answer_pkey="9881" question_pkey="9882" locale_pkey="2">
 <!-- Dokumente - Fragen und Antworten  --> 
 <document_tables>
 <!-- Dokument - Frage bzw. Antwort   --> 
  <document_table pkey="9881" content="Mobile Viren können Daten (z.B. Adressbuchdaten) auf einem Gerät ausspionieren, verändern und löschen. Es ist möglich, dass sich Viren auf Geräten einnisten und Funktionen ausführen, die der Kunde nicht wünscht. Viren können z.B. SMS/MMS versenden oder Gespräche aufbauen. Für den Kunden können dadurch ungewollte Zusatzkosten entstehen. Viren können Bildschirme verändern und Geräte blockieren. Sie können auch der Grund dafür sein, dass der Akku innert kürzester Zeit leer ist. Gesamthaft sind zwar ca. 100 Viren bekannt, bislang treten aber nur selten Virenfälle auf. Die bekannten Viren befallen Endgeräte vor allem via Bluetooth und vereinzelt auch via MMS. Es sind nur Geräte mit den Betriebssystemen Mobile Windows und Symbian betroffen (Businessgeräte, sprich Smartphones und PDA's), da auf Smartphones und PDAs auch Programme installiert und betrieben werden können. Bei allen anderen Geräten konnten bis heute keine Viren entdeckt werden. Einfache mobile Endgeräte für die Sprachdienste gelten als sicher." /> 
  </document_tables>
 <!-- Dateianhaenge zum Artikel   --> 
  <attachments /> 
  </article_content>
 <!-- Artikelinhalt in einer bestimmten Sprache   --> 
 <article_content pkey="13853" title="Apparecchio - virus mobili" translated="0" answer_pkey="9883" question_pkey="9884" locale_pkey="4">
 <!-- Dokumente - Fragen und Antworten  --> 
 <document_tables>
 <!-- Dokument - Frage bzw. Antwort  --> 
  <document_table pkey="9883" content="I virus mobili possono spiare, modificare e cancellare i dati salvati su un apparecchio (ad es. i dati nella rubrica). E' possibile che i virus si annidano sugli apparecchi ed eseguono funzioni che il cliente non desidera. I virus sono in grado di inviare ad es. SMS/MMS oppure di stabilire dei collegamenti. Per il cliente si possono creare così costi supplementari inaspettati. I virus possono modificare i Display e bloccare gli apparecchi. Possono anche essere la ragione per cui la batteria è scarica dopo poco tempo. In totale sono conosciuti circa 100 virus, finora però gli apparecchi interessati sono pochi. I virus più conosciuti colpiscono soprattutto tramite Bluetooth, alcuni anche via MMS. Sono interessati solo apparecchi con i sistemi Mobile Windows e Symbian (apparecchi Business, cioè Smartphones e PDA), dato che questi apparecchi possono essere installati anche dei programmi. Su tutti gli altri apparecchi non sono finora stati trovati dei virus. Gli apparecchi mobili semplici sono considerati sicuri." /> 
  </document_tables>
 <!-- Dateianhaenge zum Artikel   --> 
  <attachments /> 
  </article_content>
  </article_contents>
  </article_version>
 </article>	
 </articles>	
 </issue>	
 </issues>
 </topic>	
 </topics>	
 </zwischenstruktur-faq>	
 
=============================================================================================
here is my function which i am using to read the xml file.
        public void ReadTopic()
        {
            XmlReader readerIssues = null;
            XmlReader readerIssue = null;
            XmlReader readerArticles = null;
            XmlReader readerArticle = null;
            XmlReader readerArticleVersion = null;
            XmlReader readerLatestArticleVersion = null;
            XmlReader readerProjectAudiences = null;
            XmlReader readerProjectAudience = null;
            XmlReader readerArticleContents = null;
            XmlReader readerarticleContent = null;
            XmlReader readerDocumentTables = null;
            XmlReader readerDocumentTable = null;
            int intLatestArticleVersionPkey = 0;
            int intArticleVesionPkey = 0;
            string strProjectAudience = null;
 
 
 
            XmlTextReader reader = new XmlTextReader(filename);
            reader.ReadToFollowing("topic");
            if (reader.ReadState == ReadState.EndOfFile) return;
 
            do
            {  // loop for topic
                _topicRow = _topicTable.NewRow();
                _topicRow["ParentNodeName"] = "topics";
                _topicRow["TopicID"] = reader.GetAttribute("pkey");
                _topicRow["ChildNodeName"] = reader.GetAttribute("name");
                readerIssues = reader.ReadSubtree();
                readerIssues.ReadToFollowing("issues");
                do
                { // loop for issues
                    // Reading Issue inside issues one by one
                    if (readerIssues.NodeType == XmlNodeType.Element && readerIssues.IsEmptyElement == false)
                    {
                        readerIssue = readerIssues.ReadSubtree();
                        readerIssue.ReadToFollowing("issue");
                        do
                        {  // loop for issue
                            _topicRow["IssueID"] = Convert.ToInt32(readerIssue.GetAttribute("pkey"));
                            _topicRow["IssueName"] = Convert.ToString(readerIssue.GetAttribute("name"));
                            readerArticles = readerIssue.ReadSubtree();
                            readerArticles.ReadToFollowing("articles");
                            do { // loop for articles
                                // Reading article inside articles one by one
                                if (readerArticles.NodeType == XmlNodeType.Element && readerArticles.IsEmptyElement == false)
                                {
                                    readerArticle = readerArticles.ReadSubtree();
                                    readerArticle.ReadToFollowing("article");
                                    do {
                                        _topicRow["ArticleID"] = Convert.ToInt32(readerArticle.GetAttribute("pkey"));
                                        readerArticleVersion = readerArticle.ReadSubtree();
                                        readerArticleVersion.ReadToFollowing("article_version");
                                        do {
                                            if (intLatestArticleVersionPkey == 0) {
                                                intLatestArticleVersionPkey = Convert.ToInt32(readerArticleVersion.GetAttribute("pkey"));                                              
                                            } else {
                                                intArticleVesionPkey = Convert.ToInt32(readerArticleVersion.GetAttribute("pkey"));
                                                if (intLatestArticleVersionPkey < intArticleVesionPkey) {
                                                    intLatestArticleVersionPkey = intArticleVesionPkey;
                                                } else {
                                                    continue;
                                                }
                                            }
                                            _topicRow["ArticleVersionID"] = intLatestArticleVersionPkey;
                                            _topicRow["ArticleVersionName"] = Convert.ToString(readerArticleVersion.GetAttribute("name"));                                         
 
                                            readerProjectAudiences = readerArticleVersion.ReadSubtree();
                                            readerArticleContents = readerArticleVersion.ReadSubtree();
 
                                            readerProjectAudiences.ReadToFollowing("project_audiences");
                                            
                                            readerProjectAudience = readerProjectAudiences.ReadSubtree();
                                            readerProjectAudience.ReadToFollowing("project_audience");
                                            do {
                                                if (strProjectAudience == null) {
                                                    strProjectAudience = Convert.ToString(readerProjectAudience.GetAttribute("name"));
                                                } else {
                                                    strProjectAudience += "; " + Convert.ToString(readerProjectAudience.GetAttribute("name"));
                                                }
                                             } while (readerProjectAudience.ReadToNextSibling("project_audience"));
                                             MessageBox.Show(strProjectAudience);
                                             MessageBox.Show(intLatestArticleVersionPkey.ToString());
                                        } while (readerArticleVersion.ReadToNextSibling("article_version"));                                       
                                    } while (readerArticleVersion.ReadToNextSibling("article"));
                                }
                            } while (readerIssues.ReadToNextSibling("articles"));
                        } while (readerIssues.ReadToNextSibling("issue"));
                    }
                } while (readerIssues.ReadToNextSibling("issues"));
                _topicTable.Rows.Add(_topicRow);
            } while (reader.ReadToNextSibling("topic"));
            _isTopicReadingFinish = true; // finished with the xml file reading
        }

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of MogalManic
MogalManic
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
An alternative is to use an XmlDocument instead of an XmlReader

Dabas