我有一个xml字符串存储在数据库中
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<Table>
<Product>
<Product_id>1</Product_id>
<Product_name>Product 1</Product_name>
<Product_price>1000</Product_price>
</Product>
<Product>
<Product_id>2</Product_id>
<Product_name>Product 2</Product_name>
<Product_price>2000</Product_price>
</Product>
<Product>
<Product_id>3</Product_id>
<Product_name>Product 3</Product_name>
<Product_price>3000</Product_price>
</Product>
<Product>
<Product_id>4</Product_id>
<Product_name>Product 4</Product_name>
<Product_price>4000</Product_price>
</Product>
</Table>
Dim reader As XmlReader = XmlReader.Create(New StringReader(xmlstring))
其中xmlstring是String包含上面的xml数据。 如何直接读取ID为4的产品?
答案 0 :(得分:3)
您可以使用XDocument
和XDocument.Parse()
方法轻松完成此操作,而无需手动遍历XML元素:
Dim doc = XDocument.Parse("your xml string here")
Dim product = doc.Root _
.Elements("Product") _
.FirstOrDefault(Function(x) x.Element("Product_id").Value = "4")
'at this point, product contain the desired <Product> element'
'you can get product name this way :'
Dim productName = product.Element("Product_name").Value
更新:
由于.NET 2.0中不提供XDocument
,因此我们必须迁移到较早的XmlDocument
。对于那些熟悉XPath的人来说,这甚至可以更简单:
Dim doc As XmlDocument = New XmlDocument()
doc.LoadXml(xmlstring)
Dim productName = doc.SelectSingleNode("/Table/Product[Product_id='4']/Product_name") _
.InnerText
上面示例中使用的XPath意味着,搜索具有子节点<Product>
的{{1}}节点等于4,然后从<Product_id>
获取<Product>
子节点
答案 1 :(得分:2)
如果您没有使用循环,那么我认为最好使用XmlDocument类。用LINQ来解决这个问题,问题就解决了。
Dim document As XmlDocument = New XmlDocument()
document.LoadXml(xmlstring)
Dim match As XmlNode = (
From
node As XmlNode
In
document.SelectNodes("/Table/Product").Cast(Of XmlNode)()
Where
node.SelectNodes("Product_id")(0).InnerText = "4"
Select
node
).FirstOrDefault()
If (match Is Nothing) Then
'No match
Else
'Found
End If
.Net 2.0
使用For Each
循环:
Dim document As XmlDocument = New XmlDocument()
document.LoadXml(xmlstring)
Dim match As XmlNode = Nothing
For Each node As XmlNode In document.SelectNodes("/Table/Product")
If (node.SelectNodes("Product_id")(0).InnerText = "4") Then
match = node
Exit For
End If
Next
If (match Is Nothing) Then
'No match
Else
'Found
End If