Получение значения атрибутов из XML с помощью функции C# 2.0
Я использую C# 2.0, и у меня есть формат ниже XML (это просто образец) и загружен в XPathDocument xmlData;
<?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 & 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 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
Или предложить лучший подход
Пожалуйста, предложите!
Благодарю.
1 ответ
Решение
Реализовано ниже решение для вышеуказанной проблемы. Пожалуйста, предложите для любых изменений.
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;
}