我试图使用将遍历xml文档的LINQ查询。但是,我想要使用OR语句或string.toLower()来确保它始终获得所需的数据
我目前有:
// read all <item> tags and put the in an array.
XDocument xml = XDocument.Parse(xmlData);
var newItems = (from story in xml.Descendants("item")
select new Feed
{
Title = ((string) story.Element("title")),
Link = ((string) story.Element("link")),
Description = ((string) story.Element("description")),
PublishDate = ((string) story.Element("pubDate")),
}
).Take(20).ToList();
我还想改变什么:
Title = ((string)story.Element("title"))
需要搜索不区分大小写的内容。from story in xml.Descendants("item") select new Feed
需要在项目和条目中搜索(两者都不区分大小写)。PS:当我在浏览RSS文档时,我无法直接访问XML文档。
感谢您的投入。
答案 0 :(得分:2)
你可以为此创建扩展方法。这是我通常使用的课程:
public static class XElementExtensions {
public static bool EqualsIgnoreCase(this XName name1, XName name2) {
return name1.Namespace == name2.Namespace &&
name1.LocalName.Equals(name2.LocalName, StringComparison.OrdinalIgnoreCase);
}
public static XElement GetChild(this XElement e, XName name) {
return e.EnumerateChildren(name).FirstOrDefault();
}
public static IEnumerable<XElement> EnumerateChildren(this XElement e, XName name) {
return e.Elements().Where(i = > i.Name.EqualsIgnoreCase(name));
}
}
然后,您可以将代码更改为以下内容:
var newItems = (from story in xml.Root.EnumerateChildren("item")
select new Feed
{
Title = ((string) story.GetChild("title")),
Link = ((string) story.GetChild("link")),
Description = ((string) story.GetChild("description")),
PublishDate = ((string) story.GetChild("pubDate")),
}).Take(20).ToList();
答案 1 :(得分:0)
XML通常由模式定义 - 它应该具有元素名称的固定格式 - 因此import time
import serial
class WavePlate(serial.Serial):
""" This class returns an instance that contains the attributes and methods of a ``serial.Serial`` object.
"""
def __init__(self, p, brate):
"""Here's the constructor. """
self.p = p
self.brate = brate
serial.Serial.__init__(self, port=self.p, baudrate=self.brate, parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE)
与XML中的title
不一样。我不认为使用TiTlE