C# 使用属性值获取XML节点列表
我想在列表中获取属性为C# 使用属性值获取XML节点列表,c#,xml,C#,Xml,我想在列表中获取属性为isRequired=true的节点。从下面的xml中,我应该在节点列表中获得accountno和city。我正在使用XmlDocument。有人能建议怎么做吗 <sqltables> <account> <accountno Type="int" Exec="GetGlobalValue" isRequired="true"/> <accountname Type="string" Exec="
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>
使用Linq to XML要容易得多,但是使用
XmlDocument
可以通过XPath查询定位节点
XmlDocument doc = new XmlDocument();
doc.Load(xmlData);
XmlNode root = doc.DocumentElement;
XmlNodeList nodes = root.SelectNodes("//account/accountno[@isRequired='true']");
然后可以在节点上迭代访问数据。您只需为account city类型查询编写一个simlar XPath表达式。就我个人而言,我不是XPath专家,所以对上面的表达式持保留态度。以下是有关通过XPath定位元素的MSDN:
这在XDocument
中要容易得多(又称Linq到XML)
注意:如果不小心,上述lambda可能会导致NullReferenceException
然后,您也可以在节点上进行迭代,不过这次它返回的是IEnumerable
对象,而不是XmlNodeList
。以下是Linq到XML的良好起点:
编辑:
根据下面的注释,这里是一个示例linq查询,它返回“isRequired.equals(“true”)为true的所有内容,而不管标记的元素名称如何:
doc.Descendants().Where(n => n.Attribute("isRequired") != null && n.Attribute("isRequired").Value.Equals("true"));
请发布您已经尝试过的内容。您是否需要使用XmlDocument
?XDocument
,它使Linq-to-XML更易于使用。我没有使用Linq-to-XML。我使用的是XmlDocument,它将加载XML数据,如下面的XmlDocument ExampleDataXml=new-XmlDocument();ExampleDataXml.LoadXml(XmlData);我需要找出在这个xmldocument中需要为true的XML节点。我知道。但是,您没有发布任何代码,也没有解释为什么在这个简单的用例中使用xmldocument
而不是XDocument
。如果要添加代码,请编辑请回答您的问题,并向我们展示您已经尝试过的内容。我还没有编写代码。我是一名初学者。我想知道如何使用Xdocument查找节点。我没有使用Xdocument,因为它是旧的现有应用程序,现在没有修改的空间。您可以建议我如何使用Xdocument进行操作。我将使用Xdocument而不是xmldocumentThank谢谢你的建议。我不想指定Decentant节点。它应该在整个xml中循环并为我找到isRequired值为true的节点。我尝试了以下XDocument XDocument XDocument=XDocument.Load(xmlData);var nodelist=xDoc.subjections()。其中(n=>n.Attribute(“isRequired”).value.Equals(“true”));但它给我的对象引用没有设置为对象错误。哈哈,我警告过你这会发生!那是因为你不能调用null
上的Value
属性。你需要在调用变量之前检查null。我会编辑我的答案。我尝试了以下代码var nodelist=xDoc.substands()。其中(n=>n.Attribute(“isRequired“!=null)。选择(a=>a.Attribute(“isRequired”).Value.Equals(“true”);但我在节点中得到的结果为[0]=true。如何获取节点名称?选择用于投影,您不想这样做。请参阅我的编辑。另外,请查看我链接到您的API文档。如果这回答了您的原始问题,请向上投票并标记接受以结束问题。谢谢。
doc.Descendants().Where(n => n.Attribute("isRequired") != null && n.Attribute("isRequired").Value.Equals("true"));