1
<Root>
    <Sub>
        <Name>a</Name>
        <Value>1</Value>
    </Sub>
    <Sub>
        <Name>b</Name>
        <Value>2</Value>
    </Sub>
</Root>

如何根据Value元素选择元素的值Name

编辑:在 XDocument 中,当我有“a”时如何获得值“1”。

4

4 回答 4

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");
于 2013-03-11T19:06:04.183 回答
1

嗯,想想吧……

您可以轻松读取 XML 文件,只需检查条件是否<Name>与您的条件匹配,而不是读取<value>标签的值。

这是您可以获得如何从c#代码读取XML文件的答案。

于 2013-03-11T18:56:04.527 回答
1

你可以试试这个,可能有帮助

var results = from row in xdoc.Root.Descendants("Sub")
where row.Element("Name").value ="value"
select new XElement("row", row.Element("Value"));
于 2013-03-11T18:59:14.100 回答
1

这应该这样做:

(假设doc是 的一个实例XDocument

string name = "a";
var items = doc.Descendants("Sub")
               .Where(s => (string)s.Element("Name") == name)
               .Select(s => s.Element("Value").Value);

itemsIEnumerable<string>在这种情况下会导致。

如果你知道你只想要一个值:

string name = "a";
string value = doc.Descendants("Sub")
               .Where(s => (string)s.Element("Name") == name)
               .Select(s => s.Element("Value").Value)
               .FirstOrDefault();
于 2013-03-11T19:02:15.643 回答