如何在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
答案 0 :(得分:2)
使用XPath(请检查层次结构,没有缩进我可能错了):
mes_message/msg_body/ChildContainer/Level[contains(., '0')]
如果Level
不能出现在任何其他地方,那么这也有效:
//Level[contains(., '0')]
然后,您可以使用preceding-sibling
获取上一个兄弟节点的值。在LINQ to XML中,您可以使用XPathSelectElements("preceding-sibling::*")
或仅使用ElementsBeforeSelf()
。
答案 1 :(得分:1)
foreach (var el in xml.Descendants("ChildContainer").Where(el => el.Element("Level").Value == "0"))
{
string value = (string)el.Element("Name");
....
}
答案 2 :(得分:1)
单向可能是这样的
var el = xdoc.Descendants("Name").
FirstOrDefault(nameEL => nameEL.Parent.Name == "ChildContainer" && int.Parse(nameEL.Parent.Element("Level").Value) == 0);
注意int.Parse(nameEL.Parent.Element(&#34; Level&#34;)。值)。它应该是一个int或你应该首先确定它是int然后解析它
答案 3 :(得分:1)
var result = xml.Descendants("ChildContainer")
.Where(x => x.Descendants("Level").First().Value == "0")
.Descendants("Name");