C# 如果共享同一父节点的另一个节点等于某个值,如何获取XML节点的值?
我的XML的结构如下:C# 如果共享同一父节点的另一个节点等于某个值,如何获取XML节点的值?,c#,xml,database,C#,Xml,Database,我的XML的结构如下: <Database> <Member> <Name>PersonA</Name> <Rank>RankIWant</Rank> </Member> <Member> <Name>PersonB</Name> <Rank>RankIDontWant</Rank> </Member
<Database>
<Member>
<Name>PersonA</Name>
<Rank>RankIWant</Rank>
</Member>
<Member>
<Name>PersonB</Name>
<Rank>RankIDontWant</Rank>
</Member>
</Database>
人格面具
兰基旺
人
兰基登旺特
我有PersonA的
值,我想要“RankIWant”,但我不知道如何利用我所拥有的信息获得它。我该怎么办?您可以使用查询。例如:
//成员[Name=“PersonA”]/Rank
小提琴:
该XPath
查询意味着,选择all(该/
意味着all,与位置无关)对拥有父成员的节点进行排序
节点,该节点恰好具有值为PersonA
的名称
子节点
如果您习惯于Linq,也可以使用Linq转换Xml。在这种情况下,等效代码为:
var nodes = XElement.Parse(xml).Descendants("Rank")
.Where(x => x.Parent.Descendants("Name").Any(y => y.Value == "PersonA"));
在这里拉小提琴:
对于您的特定查询,我更喜欢XPath版本,但您可以选择。使用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();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串xml=
"" +
"" +
“人物”+
“兰基旺”+
"" +
"" +
“人B”+
“兰基顿旺特”+
"" +
"";
XElement数据库=XElement.Parse(xml);
XElement查询=database.Elements(“成员”)
.Where(x=>x.Element(“Rank”).Value==“RankIWant”).FirstOrDefault();
}
}
}
这里是另一种方法
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);
}
}
private static void Main()
{
字符串myRankValue=“”;
var xml=@”
人格面具
兰基旺
人
兰基登旺特
";
var xDoc=XDocument.Parse(xml);
第一名成员=
xDoc.后代(“成员”)
.Where(d=>d.subjections(“Name”).First().Value==“PersonA”)
.后代(“等级”)
.FirstOrDefault();
if(firstMember!=null)
{
myRankValue=firstMember.Value;
}
Console.WriteLine(myRankValue);
}
}
找到具有所需值的名称节点,获取父节点,读取秩的值。见XDocument。也可以用一个XPath语句完成,但步骤很小……这需要您知道Rank
是RankIWant
。这不是问题中所说的,然后搜索元素名称而不是元素排名。这只会给你第一个成员/排名的值,根本不是查询