Как искать и переместиться по узлам XML

У меня есть следующий XML:

<LOCALCELL_V18 ID = "0x2d100000">
  <MXPWR ID = "0x3d1003a0">100</MXPWR> 
</LOCALCELL_V18>
<LOCALCELL_V18 ID = "0x2d140000">
  <MXPWR ID = "0x3d1403a0">200</MXPWR>  
</LOCALCELL_V18>
<LOCALCELL_V18 ID = "0x2d180000">  
  <MXPWR ID = "0x3d1803a0">300</MXPWR>   
</LOCALCELL_V18> 

Я хочу получить внутренний текст каждого <MXPWR>. однако, не позволяется использовать ID#   для определения местоположения внутреннего текста, так как это - не всегда то же. вот мой код:

XmlNodeList LocalCell = xmlDocument.GetElementsByTagName("LOCALCELL_V18");

foreach (XmlNode LocalCell_Children in LocalCell)
{
    XmlElement MXPWR = (XmlElement)LocalCell_Children;
    XmlNodeList MXPWR_List = MXPWR.GetElementsByTagName("MXPWR");
    for (int i = 0; i < MXPWR_List.Count; i++)
    {
       MaxPwr_form_str = MXPWR_List[i].InnerText;
    }
}

Любое мнение будет цениться.

7
задан Justin R. 26 May 2010 в 17:55
поделиться

2 ответа

Я бы использовал XLinq:

using System.Xml.Linq;

var xDoc = XDocument.Load("data.xml");

var mxpwrs = xDoc.Descendants("MXPWR");
foreach (var mxpwr in mxpwrs)
{
    Console.WriteLine(mxpwr.Value);
}
5
ответ дан 6 December 2019 в 19:33
поделиться

Я бы использовал xpath. Он был разработан именно для таких проблем. Что-то вроде:

using System.Xml;
using System.Xml.XPath;
....
string fileName = "data.xml"; // your file here
XPathDocument doc = new XPathDocument(fileName);
XPathNavigator nav = doc.CreateNavigator();

// Compile an xpath expression
XPathExpression expr = nav.Compile("./LOCALCELL_V18/MXPWR");
XPathNodeIterator iterator = nav.Select(expr);

// Iterate on the node set
while (iterator.MoveNext())
{
    string s = iterator.Current.Value;
}

Когда я запускаю это на вашем XML файле (обернутом в корневой узел), я получаю:

s = 100
s = 200
s = 300
8
ответ дан 6 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: