我希望获取列表中具有属性isRequired = true
的节点。从下面的xml,我应该在我的节点列表中获得accountno和city。我正在使用XmlDocument
。有人可以建议怎么做吗?
<sqltables>
<account>
<accountno Type="int" Exec="GetGlobalValue" isRequired="true"/>
<accountname Type="string" Exec="GetGlobalValue" />
</account>
<address>
<city Type="string" Exec="GetGlobalValue" isRequired="true"/>
<stateType="string" Exec="GetGlobalValue" />
<zipcode Type="string" Exec="GetGlobalValue" />
</address>
答案 0 :(得分:0)
使用Linq-to-XML要容易得多,但使用XmlDocument
可以使用XPath查询定位节点。
XmlDocument doc = new XmlDocument();
doc.Load(xmlData);
XmlNode root = doc.DocumentElement;
XmlNodeList nodes = root.SelectNodes("//account/accountno[@isRequired='true']");
然后,您可以在nodes
上进行迭代以访问数据。您只需为帐户城市类型查询编写一个simlar XPath表达式。就个人而言,我不是XPath专家,所以请用上面的表达方式加点盐。这是通过XPath定位元素的MSDN:https://msdn.microsoft.com/en-us/library/d271ytdx(v=vs.110).aspx
这在XDocument
(又名Linq-to-XML)
XDocument doc = XDocument.Load(xmlData);
var nodes = doc.Descendants("accountno").Where(n => n.Attribute("isRequired").Value.equals("true"));
注意:如果您不小心,上述lambda会导致 NullReferenceException
然后您也可以在nodes
中迭代,但这次它会返回IEnumerable<XElement>
个对象而不是XmlNodeList
。这是Linq-to-XML的一个很好的起点:https://msdn.microsoft.com/en-us/library/bb387098.aspx
修改强>
根据下面的评论,这是一个示例linq查询,它返回“isRequired.equals(”true)“为真的所有内容,无论标签的元素名称如何:
doc.Descendants().Where(n => n.Attribute("isRequired") != null && n.Attribute("isRequired").Value.Equals("true"));