Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net XML到数据集-查找包含datatable的datarow时出现问题_.net_Xml_Vb.net_Dataset_Relationships - Fatal编程技术网

.net XML到数据集-查找包含datatable的datarow时出现问题

.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结构的示例

<?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是制作原始帖子时的复制/粘贴错误。它结构良好。