我有一个包含嵌套元素的XML文件。以下是我的XML数据(样本)
<ParentNode>
<Child1>Child1 Data</Child1>
<Child2>
<grandChild1 type="grandChild1attributevalue">
<grangrandChild1>grangrandChild1 data</grangrandChild1>
<grangrandChild2>grangrandChild2 data</grangrandChild2>
</grandChild1>
</Child2>
<child3>child 3 Data</child3>
</ParentNode>
条件: 如果“”grangrandChild1 data“与我们的数据库值匹配,那么我们必须获取child3数据值。
If ("grangrandChild1 data" == "database value which is fetched through DB")
{
//Fetch "child 3 Data" i.e., I want <child3> value.
}
注意:
grangrandChild1
数据,我们正在获取这些数据并将它们与XML字段进行比较。XDocument
加载XML数据。如何使用LINQ查询获取此值?
答案 0 :(得分:0)
尝试以下递归算法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml =
"<Root>" +
"<ParentNode>" +
"<Child1>Child1 + Data</Child1>" +
"<Child2>" +
"<grandChild1 type=\"grandChild1attributevalue\">" +
"<grangrandChild1>grangrandChild1 data</grangrandChild1>" +
"<grangrandChild2>grangrandChild2 data</grangrandChild2>" +
"</grandChild1>" +
"</Child2>" +
"<child3>child 3 Data</child3>" +
"</ParentNode>" +
"</Root>";
XDocument doc = XDocument.Parse(xml);
XElement parent = doc.Descendants("ParentNode").FirstOrDefault();
var family = GetChildren(parent);
}
static object GetChildren(XElement parent)
{
return parent.Elements().Select(x => new
{
type = x.Name.LocalName,
value = x.Value,
descendants = GetChildren(x)
}).ToList();
}
}
}