我有一个结构如下的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 tohere中,使用ReadToNextSibling方法

while (reader.ReadToNextSibling("SubEmptyElement"))


而不是IsStartElement

 while (reader.IsStartElement("Column"))

08-15 20:01