繁体   English   中英

while循环中的XmlReader IsStartElement重复上一行

[英]XmlReader IsStartElement in a while loop is repeating the previous line

我有一个结构如下的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文章中 ,我学习了使用IsStartElementKeywordPerformanceReportColumns 我得到的行为是它循环回到第一个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" */ );
    }
}

屏幕截图

屏幕

您永远不会前进到while循环内的下一个节点,因此

while (reader.IsStartElement("Column"))

如果输入,它将永远不会完成。 您可能想要类似的东西:

while (reader.Read() && reader.IsStartElement("Column"))

示例中,您已链接到 此处此处使用ReadToNextSibling方法

while (reader.ReadToNextSibling("SubEmptyElement"))

而不是IsStartElement

 while (reader.IsStartElement("Column"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM