【发布时间】:2011-02-18 23:55:16
【问题描述】:
我有解析 XML 的代码,如下所示:
<custom_fields>
<custom_field>
<column_name>foo</column_name>
<column_value>0</column_value>
<description>Submitted</description>
<data_type>BOOLEAN</data_type>
<length>0</length>
<decimal>0</decimal>
</custom_field>
<custom_field>
<column_name>bar</column_name>
<column_value>0</column_value>
<description>Validated</description>
<data_type>BOOLEAN</data_type>
<length>0</length>
<decimal>0</decimal>
</custom_field>
</custom_fields>
... more <custom_field> elements...
我想找到名为custom_field 的元素,该元素有一个名为column_name 且具有特定值的子元素(例如bar),然后找到该子元素的兄弟column_value 并获取其值。现在我在 XMlDocument 上使用 XPath 来执行此操作:
string path = "//custom_fields/custom_field[column_name='" + key + "']";
XmlNode xNode = doc.SelectSingleNode(path);
if (xNode != null)
{
XmlNode v = xNode.SelectSingleNode("column_value");
val.SetValue(v.InnerText);
}
key 是我要查找的字段的名称。
但我想在XDocument 上使用新的 LINQ to XML 语法来执行此操作。我的想法是,我会将大部分旧式 XPath 解析转移到 LINQ 方法。也许这不是一个好主意,但如果我能让它工作,那么我相信我会对 LINQ 有更好的理解,并且能够清理很多复杂的代码。
【问题讨论】:
标签: c# xpath linq-to-xml