gpt4 book ai didi

c# - 使用Linq解析出XML同级节点-C#

转载 作者:行者123 更新时间:2023-12-03 17:14:55 25 4
gpt4 key购买 nike

我有一个while循环,一次读取一个平面文件一行,然后解析信息,然后将其添加到XML文件中。
有些信息必须通过调用Web服务进行转换,而我很难从响应XML中提取所需的值。

这是我需要从中获取值的XML:

<?xml version="1.0"?>
<Root>
<Tags>
<WTs>
<WT>
<ID>ID_1</ID>
<Value>Value 1</Value>
</WT>
<WT>
<ID>ID_2</ID>
<Value>Value 2</Value>
</WT>
<WT>
<ID>ID_3</ID>
<Value>Value 3</Value>
</WT>
</WTs>
</Tags>
</Root>


我尝试同时使用Linq和xpath来获取值。
我需要的是检查每个 ID元素的 WT,如果它是我想要的元素,则获取 Value元素。

这是C#代码:

var xdoc = XDocument.Parse(retValue);
string val1 = xdoc.Root.Elements("WTs")
.Where(q => (string)q.Element("ID") == "ID_1")
.Select(q => (string)q.Element("Value"))
.FirstOrDefault();
Console.WriteLine("\n\n\nVal 1 = {0}\n\n\n", val1);

val1 = (string)xdoc.XPathSelectElement("//WTs/WT[ID='ID_1']/Value");
Console.WriteLine("\n\n\nVal1 = {0}\n\n\n", val1);


当我调试时,val1变量设置为null。我认为问题可能出在Tags节点是Root元素的子节点,而其他所有节点都是父节点。我尝试使用类似 xdoc.Root.FirstNode的方法,但这只允许我选择 elementsafterselfelementsbeforeself。我不知道如何访问子元素。

如何根据ID节点的值获取Value节点?

最佳答案

您在查询中缺少TagsWT元素:

string val1 = xdoc.Root.Element("Tags").Element("WTs").Elements("WT")
.Where(q => (string)q.Element("ID") == "ID_1")
.Select(q => (string)q.Element("Value"))
.FirstOrDefault();


或者只是寻找后代

string val1 = xdoc.Root.Descendants("WT")
.Where(wt => (string)wt.Element("ID") == "ID_1")
.Select(wt => (string)wt.Element("Value"))
.FirstOrDefault();


XPath解决方案看起来像

string val1 = (string)xdoc.XPathSelectElement("//WT[ID='ID_1']/Value");

关于c# - 使用Linq解析出XML同级节点-C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22660077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com