C# 在C中为特定元素值筛选XML#
我的C# 在C中为特定元素值筛选XML#,c#,xml,C#,Xml,我的xml文档如下所示: <Report> <id>820</id> <number>u_incident_1</number> <Entry> <findings>1</findings> <area>PS</area> <section>Section 1</section> <image>R0
xml
文档如下所示:
<Report>
<id>820</id>
<number>u_incident_1</number>
<Entry>
<findings>1</findings>
<area>PS</area>
<section>Section 1</section>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
</Entry>
<Entry>
<findings>2</findings>
<area>PR</area>
<section>Section 2</section>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
</Entry>
<RE_image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</RE_image>
<RE_image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</RE_image>
</Report>
如何修改代码以使用第1节元素过滤图像?使用xml linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication180
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement Entry = doc.Descendants().Where(x => (x.Name.LocalName == "Entry") && ((string)x.Element("findings") == "1")).FirstOrDefault();
XNamespace ns = Entry.GetDefaultNamespace();
List<string> images = Entry.Elements(ns + "image").Select(x => (string)x).ToList();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序180
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
XDocument doc=XDocument.Load(文件名);
XElement Entry=doc.subjects()。其中(x=>(x.Name.LocalName==“Entry”)&&((string)x.Element(“结果”)==“1”)。FirstOrDefault();
XNamespace ns=Entry.GetDefaultNamespace();
List images=Entry.Elements(ns+“image”).Select(x=>(string)x.ToList();
}
}
}
请尝试以下解决方案
c#
输出
IEnumerable<XElement>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
IEnumerable
R0LGodlhaqabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa==
R0LGodlhaqabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa==
R0LGodlhaqabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa==
如果xml文档有名称空间,您能告诉我代码会有什么不同吗?我更新了代码。Perfecto:)按预期工作,非常感谢:)这在相当长的一段时间内工作正常,现在我有很大的xml文件,XDocument似乎无法处理它们。我读到的是xmlReader是要使用的。在上面的示例中,您能告诉我如何使用xmlReader而不是XDocument吗?请为此创建一个新问题。请在此处找到它
void Main()
{
const string inputXMLFile = @"e:\Temp\Sanosi.xml";
XDocument xdoc = XDocument.Load(inputXMLFile);
var images = xdoc.Descendants("Entry")
.Where(x => x.Element("section").Value.Equals("Section 1"))
.Elements("image");
Console.WriteLine(images);
}
IEnumerable<XElement>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>
<image>R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==</image>