在vb中用XML检索值
我正在寻找一种更有效的方法,使用VB在下面的XML中从@agesex检索“F” 以下是XML结构的简化版本:在vb中用XML检索值,xml,vb.net,parsing,Xml,Vb.net,Parsing,我正在寻找一种更有效的方法,使用VB在下面的XML中从@agesex检索“F” 以下是XML结构的简化版本: <GridRow XMLVersion="1.0" ColumnNames="Description|Notes|Detail Question|Detail Question Id"> <Row> > ... </Row> > ... <Row>
<GridRow XMLVersion="1.0" ColumnNames="Description|Notes|Detail Question|Detail Question Id">
<Row>
> ...
</Row>
> ...
<Row>
<NodeLevel>0</NodeLevel>
<RowData>Cancer|@agesex=F;;|Cancer - Female|2320</RowData>
<RowStyle>|||</RowStyle>
</Row>
</Gridrow>
使用:
Imports System.Xml
导入System.Text.RegularExpressions
Dim d作为新的XML文档
d、 加载(“file.xml”)
' ... 在此特定情况下(或/GridRow/Row/RowData,如果您希望特定)
' ... 将选择文档中至少1级深度的所有RowData节点。
Dim_rowNodes作为XmlNodeList=d.SelectNodes(“.//RowData”)
对于每个_rowNode,作为_rowNodes中的XmlNode
如果新的正则表达式(@agesex=。”,RegexOptions.None).Match(s).ToString.endswith(“F”),那么
' ... 剂量
如果结束
下一个
' ... 仅举个例子
Dim_rowNodes为XmlNodeList=d.SelectNodes(“//GridRow”)
对于每个_rowNode,作为_rowNodes中的XmlNode
' ... 在每个网格行上迭代
对于每个_childNode作为_rowNode中的XmlNode
' ... 迭代每行
对于每个_itemNode,作为_childNode中的XmlNode
' ... 迭代行中的每个项
将a设置为字符串=_itemNode.InnerText.Trim
下一个
' ... 或者直接获取节点
Dim b As String=\u childNode.SelectSingleNode(“RowData”).InnerText.Trim
' ... 要指定属性(假设为虚构性别),请执行以下操作:
尺寸g为字符串=“女性”
Dim c作为XmlNodeList=_childNode.SelectNodes(“RowData[@gender='”&g&“]”)
' ... 同样根据文档,您可以匹配值(包含在.InnerText属性中的数据)
Dim e As String=“myValue”
Dim f作为XmlNodeList=_childNode.SelectNodes(“RowData[.='”&e&“']”)
下一个
下一个
示例:
正如本文档所述,用于查询的lang/符号是:如果您知道要查找的数据,它支持更具选择性的查询
此外,XML属性
定义如下:
值
如果性别是一种财产,则会容易得多,如上例所示,即:
Dim g=“F”:d.SelectNodes(“.//RowData[@gender=”&g&“]”)
;p您是否能够获取?是的,我们正在使用for-each循环(item.InnerText.Contains(@agesex))来检索。请告诉我们是否有一种使用LINQ或XMLDocument的简单方法。另外,使用indexOf()是不够的,因为@agesex之前的文本可能会有所不同。在本例中,它是“癌症”,但可能是不同的值(即“肝脏问题”)。谢谢。您的示例帮助我们更好地理解SelectSingleNoe()。@MTL323好的,我想这终于解决了。基本涵盖了所有问题。如果您有任何问题,请提问。
xmlDoc.LoadXml(topProblemListTemplate.TemplateXml)
nodeList = xmlDoc.SelectNodes("/GridRow")
For Each row As XmlNode In nodeList
For Each item As XmlNode In row.ChildNodes
If item.InnerText.Contains("@agesex") Then
Dim index As Integer = item.InnerText.IndexOf("@agesex=") + Len("@agesex=")
If index > 0 Then
Dim value As String = item.InnerText.Substring(index, 1)
End If
End If
Next
Next