2012-05-23 3 views
0

Я использую C# 2.0, и у меня есть формат xml (это всего лишь образец) и загружен в XPathDocument xmlData;Получение значения атрибутов из XML с помощью функции C# 2.0

<?xml version="1.0"?> 
<sitedata> 
<resources> 
<WorldwideSites>Worldwide sites</WorldwideSites> 
<PublishedDate>20120507163835</PublishedDate> 
</resources> 
<region code="global" title="Global"> 
<site defaultLanguage="en" id="tcm:0-233-1" url="/english" countryCode="" title="" order="1"> 
<language code="en" pubId="tcm:0-233-1" countrylang="en-GB">English</language> 
</site> 
</region> 
<region code="NSAM" title="North &amp; South America"> 
<site defaultLanguage="es" id="tcm:0-520-1" url="/ar/spanish" countryCode="AR" title="Argentina"> 
<language code="es" pubId="tcm:0-520-1" countrylang="es-AR" >Español</language> 
<language code="en" pubId="tcm:0-447-1" countrylang="en-AR" >English</language> 
</site> 
</region> 
<region code="EU" title="Europe"> 
<site defaultLanguage="de" id="tcm:0-336-1" url="/at/german" countryCode="AT" title="Austria"> 
<language code="de" pubId="tcm:0-336-1" countrylang="de-AT" >Deutsch</language> 
<language code="en" pubId="tcm:0-337-1" countrylang="en-AT" >English</language> 
</site> 
</region> 
</sitedata> 

Теперь я хочу создать функцию в C# 2.0, которая будет принимать этот XML в качестве входных данных и возвращать обратно многомерный массив или ArrayList

ArrayList xmldata = new ArrayList(); 
xmldata[0][0] will be ["233"]["en-GB"] //a middle part of pubId attribute 
xmldata[1][1] will be ["520"]["es-AR"] //attribute value of countrylang 
.. 
.. 
and so on 

Или предложить наилучший подход

Пожалуйста, предложите !!

Спасибо.

ответ

0

Реализовано ниже решение проблемы выше. Пожалуйста, предложите любые изменения.

public ArrayList GetPubIDAndCountryLangFromSitesXML(XPathDocument xPathDoc) 
     { 
      ArrayList retArr = new ArrayList(); 

      XPathNavigator navigator = xPathDoc.CreateNavigator(); 
      if (navigator != null) 
      { 
       foreach (XPathNavigator navdata in navigator.Select("sitedata/region/site/language")) 
       { 
        string[] str = new string[2]; 
        string pubid = navdata.SelectSingleNode("@pubId").Value; 
        string clang = navdata.SelectSingleNode("@countrylang").Value; 
        if (!string.IsNullOrEmpty(pubid) && !string.IsNullOrEmpty(clang)) 
        { 
         str[0] = pubid.Split('-')[1]; 
         str[1] = clang; 
         if (pubid != "481") 
         { 
          retArr.Add(str); 
         } 
        } 
       } 
      } 
      return retArr; 
     } 
Смежные вопросы