我有一个结构如下的XML:
<?xml version="1.0" encoding="utf-8"?>
<Report blah blah blah>
<KeywordPerformanceReportColumns>
<Column name="GregorianDate" />
<Column name="AccountId" />
<Column name="AccountNumber" />
<Column name="AccountName" />
<Column name="CampaignId" />
<Column name="CampaignName" />
etc....
通过此SO post,我学会了使用
IsStartElement
遍历KeywordPerformanceReportColumns
的子级。我得到的行为是它循环回到第一个Column
,而从未进行到下一个孩子。码
//use xmlreader to read the memorystream
using (XmlReader reader = XmlReader.Create(memStream))
{
while (reader.Read())
{
reader.ReadStartElement("Report");
//schema information
reader.ReadStartElement("KeywordPerformanceReportColumns");
//columns
while (reader.IsStartElement("Column"))
{
//note interested in whitespace nodes
bool isWhiteSpace = reader.NodeType == XmlNodeType.Whitespace;
if (!isWhiteSpace)
{
string columnName = reader.GetAttribute("name");
Console.WriteLine(columnName);
}
}
reader.ReadEndElement( /* "KeywordPerformanceReportColumns" */ );
reader.ReadEndElement( /* "Report" */ );
}
}
屏幕截图
最佳答案
在example you've linked to和here中,使用ReadToNextSibling方法
while (reader.ReadToNextSibling("SubEmptyElement"))
而不是IsStartElement
while (reader.IsStartElement("Column"))