我正在学习 C#,我想做的一件事是读入 XML 文件并搜索它。
我找到了一些示例,我可以在其中搜索特定节点(例如,如果它是名称或 ISBN)以查找特定关键字。
我想做的是搜索整个 XML 文件,以便找到关键字的所有可能匹配项。
我知道 LIST 允许“包含”来查找关键字,是否有类似的功能来搜索 XML 文件?
我使用的是安装 Visual Studio 时包含的通用 books.xml 文件。
如果您正在寻找一个您已经知道的关键字,您可以将 XML 解析为简单的文本文件并使用 StreamReader 进行解析。但是,如果您正在寻找 XML 中的元素,您可以使用 XmlTextReader(),请考虑以下示例:
using (XmlTextReader reader = new XmlTextReader(xmlPath))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
//do your code here
}
}
}
希望能帮助到你。:)
例如,您可以使用LINQ TO XML。此示例在元素和属性中搜索关键字 - 在它们的名称和值中。
private static IEnumerable<XElement> FindElements(string filename, string name)
{
XElement x = XElement.Load(filename);
return x.Descendants()
.Where(e => e.Name.ToString().Equals(name) ||
e.Value.Equals(name) ||
e.Attributes().Any(a => a.Name.ToString().Equals(name) ||
a.Value.Equals(name)));
}
并使用它:
string s = "search value";
foreach (XElement x in FindElements("In.xml", s))
Console.WriteLine(x.ToString());
如果您只想搜索关键字出现在叶节点的文本中,请尝试以下操作(使用此示例books.xml):
string keyword = "com";
var doc = XDocument.Load("books.xml");
var query = doc.Descendants()
.Where(x => !x.HasElements &&
x.Value.IndexOf(keyword, StringComparison.InvariantCultureIgnoreCase) >= 0);
foreach (var element in query)
Console.WriteLine(element);
输出:
<genre>Computer</genre>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
<genre>Computer</genre>
<title>MSXML3: A Comprehensive Guide</title>
<genre>Computer</genre>
<title>Visual Studio 7: A Comprehensive Guide</title>
<genre>Computer</genre>
<description>Microsoft Visual Studio 7 is explored in depth,
looking at how Visual Basic, Visual C++, C#, and ASP+ are
integrated into a comprehensive development
environment.</description>