65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 XMLReader 迭代 XML

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.50/5 (2投票s)

2011年12月15日

CPOL
viewsIcon

24702

用于迭代 XML 的符合人体工程学的语法

**我正在审查代码,因为有人报告了一个潜在的错误,我尚未验证。我将很快进行更新。感谢您的耐心 - 12月19日 - rj*** 我们的辅助方法将创建一个元素字典和一个属性字典。因此,我们只需像这样循环遍历元素和属性。 正如 XML 一样,总有 999 种其他方法可以做同样的事情,但是,这是一种简单的语法和快速的方法。
Dictionary<string, string> elements = GetElements( xmlFragment );
            foreach ( var elementKeyPair in elements )
            {
                Dictionary<string, string> attributes = GetAttributes(elementKeyPair.Key, xmlFragment);
            }
        public static Dictionary<string, string> GetElements(string XmlFragment)
        {
            Dictionary<string, string> dictionary = new Dictionary<string, string>();
            byte[] byteArray = Encoding.ASCII.GetBytes(XmlFragment); //todo: optimize me
            MemoryStream stream = new MemoryStream(byteArray);        //todo: optimize me
            XmlReader reader = XmlReader.Create(stream);
            try
            {
                while (reader.Read())
                {
                    if (reader.IsStartElement())
                    {
                                               KeyValuePair<string, string> pair = new KeyValuePair<string, string>(reader.Name, reader.Value);
                        if (dictionary.Contains(pair) == false)
                        {
                            dictionary.Add(reader.Name, reader.Value);
                        }
                    }
                }
            }
            catch { }
            return dictionary;
        }
        public static Dictionary<string, string> GetAttributes(string element, string XmlFragement)
        {
            Dictionary<string, string> dictionary = new Dictionary<string, string>();
            byte[] byteArray = Encoding.ASCII.GetBytes(XmlFragement); //todo: optimize me
            MemoryStream stream = new MemoryStream(byteArray);        //todo: optimize me
            XmlReader reader = XmlReader.Create(stream);
          
            while (reader.Read())
            {
                if (reader.IsStartElement())
                {
                    if ( reader.Name == element )
                    {
                        for ( int i = 0; i < reader.AttributeCount; ++i )
                        {
                            reader.MoveToNextAttribute();
                            dictionary.Add(reader.Name, reader.Value);
                        }
                    }
                }
            }
            return dictionary;
        }
© . All rights reserved.