我的XML结构如下:
<Database>
<Member>
<Name>PersonA</Name>
<Rank>RankIWant</Rank>
</Member>
<Member>
<Name>PersonB</Name>
<Rank>RankIDontWant</Rank>
</Member>
</Database>
我有PersonA的<Name>
值,我想要&#34; RankIWant&#34;,但我不知道如何获取我拥有的信息。我该怎么办?
答案 0 :(得分:3)
您可以使用XPath
查询。以你的例子:
//Member[Name = "PersonA"]/Rank
小提琴:https://dotnetfiddle.net/udobyd
XPath
查询意味着,选择所有(//
表示所有,独立于位置)Rank
具有父Member
个节点的节点恰好具有Name
后代,其值为PersonA
。
如果您习惯使用Linq,也可以使用Linq to Xml。在这种情况下,等效代码为:
var nodes = XElement.Parse(xml).Descendants("Rank")
.Where(x => x.Parent.Descendants("Name").Any(y => y.Value == "PersonA"));
在这里小提琴:https://dotnetfiddle.net/bOVOy7
对于您的特定查询,我更喜欢XPath版本,但您可以选择。
答案 1 :(得分:0)
使用xml Linq
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 =
"<Database>" +
"<Member>" +
"<Name>PersonA</Name>" +
"<Rank>RankIWant</Rank>" +
"</Member>" +
"<Member>" +
"<Name>PersonB</Name>" +
"<Rank>RankIDontWant</Rank>" +
"</Member>" +
"</Database>";
XElement database = XElement.Parse(xml);
XElement query = database.Elements("Member")
.Where(x => x.Element("Rank").Value == "RankIWant").FirstOrDefault();
}
}
}
答案 2 :(得分:0)
这是另一种方法。
private static void Main()
{
string myRankValue = "";
var xml = @"<Database>
<Member>
<Name>PersonA</Name>
<Rank>RankIWant</Rank>
</Member>
<Member>
<Name>PersonB</Name>
<Rank>RankIDontWant</Rank>
</Member>
</Database>";
var xDoc = XDocument.Parse(xml);
var firstMember =
xDoc.Descendants("Member")
.Where(d => d.Descendants("Name").First().Value == "PersonA")
.Descendants("Rank")
.FirstOrDefault();
if (firstMember != null)
{
myRankValue = firstMember.Value;
}
Console.WriteLine(myRankValue);
}
}