Как использовать IN с xmlreader - PullRequest
0 голосов
/ 20 декабря 2011

Как использовать IN(,,,) с xmlreader для получения определенных узлов.

private static IEnumerable<DayNode> ReadDayNodes(string filePath)
        {
            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (XmlReader xrdr = new XmlTextReader(fs))
                while (xrdr.Read())
                    if (xrdr.NodeType == XmlNodeType.Element && xrdr.LocalName == "day")
                        yield return new DayNode(xrdr.GetAttribute("name"), xrdr.GetAttribute("short"), xrdr.GetAttribute("day"));
        }

Если у меня есть список строк. как это:

List<string> names = new new List<string>();

и я хочу получить только те узлы, которые name в предыдущем списке. Как это сделать?

1 Ответ

2 голосов
/ 20 декабря 2011

Вы имеете в виду, когда локальное имя элемента не обязательно "день", а находится в списке?

if(xrdr.NodeType == XmlNodeType.Element && names.Contains(xrdr.LocalName))

Редактировать следующее в комментариях:

if (xrdr.NodeType == XmlNodeType.Element && xrdr.LocalName == "day")
  foreach(string localName in names)
  {
    string attVal = xrdr.GetAttribute(localName);
    if(attVal != null)
    //we could just yield return attVal, but presuming we want to know which attribute it was on:
     yield return Tuple.Create(localName, attVal);
  }
...