.net XML到数据集-查找包含datatable的datarow时出现问题
很抱歉,如果描述不好,但我不知道如何把这个。。。 但这里有一个XML结构的示例.net XML到数据集-查找包含datatable的datarow时出现问题,.net,xml,vb.net,dataset,relationships,.net,Xml,Vb.net,Dataset,Relationships,很抱歉,如果描述不好,但我不知道如何把这个。。。 但这里有一个XML结构的示例 <?xml version=”1.0” encoding=”UTF-8”> <Response xmlns="http://www.blah.com"> <searchResult> <info> <firstName>John</firstName> <lastName>Doe</lastN
<?xml version=”1.0” encoding=”UTF-8”>
<Response xmlns="http://www.blah.com">
<searchResult>
<info>
<firstName>John</firstName>
<lastName>Doe</lastName>
<totalCharges>100.00</totalCharges>
<nonPaymentCode>99999</nonPaymentCode>
</info>
<info>
<firstName>Susan</firstName>
<lastName>Doe</lastName>
<totalCharges>1000.00</totalCharges>
<errorCodes>
<errorCode>12345</errorCode>
</errorCodes>
</info>
<info>
<firstName>Peter</firstName>
<lastName>Doe</lastName>
<totalCharges>10.00</totalCharges>
<errorCodes>
<errorCode>12345</errorCode>
<errorCode>54321</errorCode>
<errorCode>85246</errorCode>
</errorCodes>
</info>
</searchResult>
</claimInquiryResponse>
这给了我errorCodes表中数据的实际值。但我不知道如何将它链接回与它关联的行/人。关系生成的索引是根据它们的发生情况构建的(例如,susan的错误代码为0,peter的错误代码为1),与它们在XML中的位置无关
我不是做错了,就是看错了这些数据。
我知道我可以使用XML阅读器来获取所有这些,但是数据已经在数据集中了,我想学习一些新的东西。所以请把它作为最后的手段
提前谢谢 第一点是,您的XML格式不正确-快速复制并粘贴到.NET项目中的XML文档中会显示:
,这是一个开始
如果您可以解决这个问题:如果您使用ReadMode.Auto执行ReadXml操作,那么您应该能够执行以下操作。请注意,.NET添加了额外的列来维护关系,我现在已经硬编码了这些列:
Dim strfile As String = "somefile.xml"
Dim ds As New DataSet
ds.ReadXml(strfile, XmlReadMode.Auto)
For Each drInfo As DataRow In ds.Tables("info").Rows
Debug.Print(drInfo.Item("lastname").ToString + " " + drInfo.Item("firstname").ToString)
For Each drCodes As DataRow In ds.Tables("errorCodes").Rows
If drCodes.Item("info_Id").ToString = drInfo.Item("info_Id").ToString Then
For Each drCodeDetail As DataRow In ds.Tables("errorCode").Rows
If drCodeDetail.Item("errorCodes_Id").ToString = drCodes.Item("errorCodes_Id").ToString Then
Debug.Print(" Code ->" + drCodeDetail.Item("errorCode_Text").ToString)
End If
Next
End If
Next
Next
更好的方法可能是循环查看info表,然后使用dataview筛选errorCodes,并使用errorCode表查找您感兴趣的代码:
Dim dvCodes As New DataView, dvCodeDetail As New DataView
dvCodes = ds.Tables("errorCodes").DefaultView
dvCodeDetail = ds.Tables("errorCode").DefaultView
For Each drInfo As DataRow In ds.Tables("info").Rows
Debug.Print(drInfo.Item("lastname").ToString + " " + drInfo.Item("firstname").ToString)
dvCodes.RowFilter = "info_Id = " + drInfo.Item("info_Id").ToString
For i As Integer = 0 To dvCodes.Count - 1
dvCodeDetail.RowFilter = "errorCodes_Id = " + dvCodes(i).Item(0).ToString
For j As Integer = 0 To dvCodeDetail.Count - 1
Debug.Print(" Code ->" + dvCodeDetail(j).Item(0).ToString)
Next
Next
Next
第一点是,您的XML格式不正确-快速复制并粘贴到.NET项目中的XML文档中会显示:
如果您可以解决这个问题:如果您使用ReadMode.Auto执行ReadXml操作,那么您应该能够执行以下操作。请注意,.NET添加了额外的列来维护关系,我现在已经硬编码了这些列:
Dim strfile As String = "somefile.xml"
Dim ds As New DataSet
ds.ReadXml(strfile, XmlReadMode.Auto)
For Each drInfo As DataRow In ds.Tables("info").Rows
Debug.Print(drInfo.Item("lastname").ToString + " " + drInfo.Item("firstname").ToString)
For Each drCodes As DataRow In ds.Tables("errorCodes").Rows
If drCodes.Item("info_Id").ToString = drInfo.Item("info_Id").ToString Then
For Each drCodeDetail As DataRow In ds.Tables("errorCode").Rows
If drCodeDetail.Item("errorCodes_Id").ToString = drCodes.Item("errorCodes_Id").ToString Then
Debug.Print(" Code ->" + drCodeDetail.Item("errorCode_Text").ToString)
End If
Next
End If
Next
Next
更好的方法可能是循环查看info表,然后使用dataview筛选errorCodes,并使用errorCode表查找您感兴趣的代码:
Dim dvCodes As New DataView, dvCodeDetail As New DataView
dvCodes = ds.Tables("errorCodes").DefaultView
dvCodeDetail = ds.Tables("errorCode").DefaultView
For Each drInfo As DataRow In ds.Tables("info").Rows
Debug.Print(drInfo.Item("lastname").ToString + " " + drInfo.Item("firstname").ToString)
dvCodes.RowFilter = "info_Id = " + drInfo.Item("info_Id").ToString
For i As Integer = 0 To dvCodes.Count - 1
dvCodeDetail.RowFilter = "errorCodes_Id = " + dvCodes(i).Item(0).ToString
For j As Integer = 0 To dvCodeDetail.Count - 1
Debug.Print(" Code ->" + dvCodeDetail(j).Item(0).ToString)
Next
Next
Next
最后,我只是通读了XML,检查了节点名,并为错误代码构建了一个单独的表,当我找到info的结束元素时,我逐个地吐出了表 最后,我只是通读XML,检查节点名称,并为错误代码构建一个单独的表,当我找到info的end元素时,我逐个地将表吐出 生成原始帖子时,无效xml是复制/粘贴错误。它的结构良好。无效的xml是制作原始帖子时的复制/粘贴错误。它结构良好。