<Root>
<Sub>
<Name>a</Name>
<Value>1</Value>
</Sub>
<Sub>
<Name>b</Name>
<Value>2</Value>
</Sub>
</Root>
如何根据Value
元素选择Name
元素的值?
编辑:在XDocument中,当我有“a”时如何获得值“1”。
答案 0 :(得分:2)
我建议您使用强制转换节点,而不是直接访问Value
属性:
int value = xdoc.Descendants("Sub")
.Where(s => (string)s.Element("Name") == "a")
.Select(s => (int)s.Element("Value"))
.FirstOrDefault();
如果缺少节点的默认值(零)不符合您的需要,那么您可以在获取值之前检查所需的Sub
元素是否存在:
var sub = xdoc.Descendants("Sub")
.FirstOrDefault(s => (string)s.Element("Name") == "a");
if (sub != null)
value = (int)sub.Element("Value");
或简单的一行XPath和Linq:
int value = (int)xdoc.XPathSelectElement("//Sub[Name='a']/Value");
答案 1 :(得分:1)
好吧,想一想......
您可以轻松阅读XML文件,只需检查条件<Name>
的内部文本是否与您的条件匹配,而不是必须阅读<value>
标记的值。
您可以在这里找到how to read XML file from c# code的答案。
答案 2 :(得分:1)
var results = from row in xdoc.Root.Descendants("Sub")
where row.Element("Name").value ="value"
select new XElement("row", row.Element("Value"));
答案 3 :(得分:1)
这应该这样做:
(假设doc
是XDocument
)的实例
string name = "a";
var items = doc.Descendants("Sub")
.Where(s => (string)s.Element("Name") == name)
.Select(s => s.Element("Value").Value);
在这种情况下, items
会产生IEnumerable<string>
。
如果您知道自己只需要一个值:
string name = "a";
string value = doc.Descendants("Sub")
.Where(s => (string)s.Element("Name") == name)
.Select(s => s.Element("Value").Value)
.FirstOrDefault();