我有以下XML
<xml>
<ObsCont xCampo="field1">
<xTexto>example1</xTexto>
</ObsCont>
<ObsCont xCampo="field2">
<xTexto>example2</xTexto>
</ObsCont>
<ObsCont xCampo="field3">
<xTexto>example3</xTexto>
</ObsCont>
<field>information</field>
</xml>
有没有办法在ObsCont中使用DataSet获取属性xCampo的“field2”值的“xTexto”内容?
如下所示,需要一个单一的衬垫:
DataSet ds = new DataSet();
ds.ReadXml(StrArquivoProc);
ds.Tables["xml"].Rows[0]["field"].ToString();
//field == "information"
如果我使用相同的方法,我没有指定我想要具有所需属性的方法。
答案 0 :(得分:1)
你当然可以使用Linq to XML之类的东西将整个文档加载到一个集合中,你可以进一步查询或迭代使用到你想要的任何目的,包括绑定到数据控件。或者,您可以直接查询文档以获取所需的属性/元素值组合,如下所示。
XDocument document = XDocument.Parse(xml);
// or document = XDocument.Load(xmlFile)
// System.Xml.Linq namespace
var query = (from obscont in document.Descendants("ObsCont")
where obscont.Attribute("xCampo").Value == "field2"
select obscont.Element("xTexto").Value).First();
Console.WriteLine(query);
答案 1 :(得分:1)
如果您有一个绝对已知的数据路径,那么您可以使用XPath:
Dim myFile = "c:\test.xml"
Dim X As New System.Xml.XmlDocument()
X.Load(myFile)
Dim N = X.SelectSingleNode("//xml/ObsCont[@xCampo=""field2""]/xTexto")
Trace.WriteLine(N.InnerText)
答案 2 :(得分:0)
以下是Chris Haas解决方案的XPathDocument版本,以及它的价值。
Dim myFile = "c:\test.xml"
Dim fs As New FileStream(myFile, FileMode.Open)
Dim doc As New XPathDocument(fs)
fs.Dispose()
Dim nav = doc.CreateNavigator()
Dim node = nav.SelectSingleNode("//xml/ObsCont[@xCampo=""field2""]/xTexto")
Trace.WriteLine(node.Value)
或者,如果您在字符串中包含XML,请改用StringReader。
Dim doc As New XPathDocument(New StringReader(myXml))
'And so forth...'