查询级别0名称值
本文关键字:0名 查询 | 更新日期: 2023-09-27 18:27:46
如何在0的第一个前面找到name的值。那么下面的答案是XXXXXX?
<?xml version="1.0" encoding="utf-8" ?>
- <mes_message>
<msg_environment>UUUUU</msg_environment>
- <msg_header>
<msg_type>VscLineageResponse</msg_type>
<msg_stat>1</msg_stat>
<msg_source>M590</msg_source>
<msg_time>2014/10/23 09:37:44</msg_time>
<msg_description />
<msg_string>Inquiry completed successfully</msg_string>
</msg_header>
- <msg_body>
- <ChildContainer>
<Name>MEDMESC-CLN0001</Name>
<Level>1</Level>
</ChildContainer>
- <ChildContainer>
<Name>Bay2-CLN0001</Name>
<Level>1</Level>
</ChildContainer>
- <ChildContainer>
<Name>XXXXXX</Name>
<Level>0</Level>
</ChildContainer>
- <ChildContainer>
<Name>Bay2-CLN0001</Name>
<Level>1</Level>
</ChildContainer>
</msg_body>
</mes_message
使用XPath(请检查层次结构,没有缩进I可能是错误的):
mes_message/msg_body/ChildContainer/Level[contains(., '0')]
如果Level
不能在任何其他地方,这也适用:
//Level[contains(., '0')]
然后可以用preceding-sibling
获取上一个同级节点的值。在LINQ to XML中,您可以使用XPathSelectElements("preceding-sibling::*")
或简单地使用ElementsBeforeSelf()
。
foreach (var el in xml.Descendants("ChildContainer").Where(el => el.Element("Level").Value == "0"))
{
string value = (string)el.Element("Name");
....
}
一种方式可以是类似于这个
var el = xdoc.Descendants("Name").
FirstOrDefault(nameEL => nameEL.Parent.Name == "ChildContainer" && int.Parse(nameEL.Parent.Element("Level").Value) == 0);
只要小心int.Parse(nameEL.PParent.Element("Level").Value)。它应该是一个int,或者你应该首先确定它是int,然后解析它
var result = xml.Descendants("ChildContainer")
.Where(x => x.Descendants("Level").First().Value == "0")
.Descendants("Name");