如何在xmlreader中使用IN

时间:2011-12-19 20:38:13

标签: c# asp.net xml linq xmlreader

如何使用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 个答案:

答案 0 :(得分:2)

你的意思是,元素的本地名称不是“日”所必需的,而是在列表中?

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);
  }