VB.Net XMLTextReader不断跳过子元素中的第一个元素
我希望有人能帮我。。。我正在读取一个从服务器创建的XML文件,一切都很好,只是当我试图处理该文件时,它总是跳过第一个子元素之一。当我在没有处理的情况下运行一个测试时,只有一个直接的读卡器并循环遍历元素,第一个元素就在那里。但是,只要我添加一个检查来查看节点是否是一个元素,它就会跳过一个“附件”元素。以下是我的XML:VB.Net XMLTextReader不断跳过子元素中的第一个元素,xml,vb.net,Xml,Vb.net,我希望有人能帮我。。。我正在读取一个从服务器创建的XML文件,一切都很好,只是当我试图处理该文件时,它总是跳过第一个子元素之一。当我在没有处理的情况下运行一个测试时,只有一个直接的读卡器并循环遍历元素,第一个元素就在那里。但是,只要我添加一个检查来查看节点是否是一个元素,它就会跳过一个“附件”元素。以下是我的XML: <Reports xmlns=""> <FinalReport JobID="335417" LineItemID="400391" FileNumber="AG
<Reports xmlns="">
<FinalReport JobID="335417" LineItemID="400391" FileNumber="AGAINTEST" PropertyID="98765312" PONumber="" PropAddress="9255 John Street" PropCity="Fairfax" PropState="VA" PropZip="22132" OrderStatus="Delivered" ServiceName="Ext Property Inspection">
<DataCapture>
<!--Report saved: 7/1/2011 11:28:43 AM by: frank-->
<report>
<StreetVisible>No</StreetVisible>
<Vacant>No</Vacant>
<SaleSign>No</SaleSign>
<RentSign>No</RentSign>
<ExtCondition>Average</ExtCondition>
<ComparedCondition>Similar</ComparedCondition>
<DeferredMaintenance>No</DeferredMaintenance>
<UnderConstruction>No</UnderConstruction>
<SafetyIssues>No</SafetyIssues>
<NaturalDisaster>No</NaturalDisaster>
<PropertyLocation>Gated</PropertyLocation>
<PropertyUse>Triplex</PropertyUse>
<Nonresidential>No</Nonresidential>
<Outbuildings>Shed</Outbuildings>
<Garage>No</Garage>
<Carport>No</Carport>
<Capacity>2</Capacity>
<AdverseFactors>Railroad</AdverseFactors>
<PositiveFactors>GolfCourse</PositiveFactors>
<PropertyType>CondoGarden</PropertyType>
<HomeFront>Yes</HomeFront>
<AddressPhoto>Yes</AddressPhoto>
<StreetScene>Yes</StreetScene>
<AnyComments>Test some comments here...</AnyComments>
<FieldRepName>JOE INSPECTIONS</FieldRepName>
</report>
</DataCapture>
<Attachment imageID="1988" extension="jpg" image_type="IMG" Keyed="0" ImageNote="" Image="Base64" />
<Attachment imageID="1990" extension="jpg" image_type="IMG" Keyed="0" ImageNote="" Image="Base64" />
<Attachment imageID="1991" extension="jpg" image_type="IMG" Keyed="0" ImageNote="" Image="Base64" />
<Attachment imageID="1992" extension="jpg" image_type="IMG" Keyed="0" ImageNote="" Image="Base64" />
<Attachment imageID="1993" extension="jpg" image_type="IMG" Keyed="0" ImageNote="" Image="Base64" />
<Attachment imageID="1994" extension="jpg" image_type="IMG" Keyed="0" ImageNote="" Image="Base64" />
</FinalReport>
<PDFReport>Base64</PDFReport>
如果我遗漏了什么,请告诉我。。。我已经厌倦了看这个代码;D
谢谢 XmlTextReader被记录为“仅转发”; 我个人对此的解释是,如果你有属性x=1y=2z=3 并尝试使用getattribute(“y”),然后跳过属性“x”,无法返回到它-属性本身不是哈希列表,而是向前搜索的字符串缓冲区 因此,如果输入数据集中缺少一个属性(或顺序错误),这不意味着您将跳转到下一个元素吗?我没有正确地测试它,但似乎符合我编写(然后正确地重新编写)的代码的行为 只有我的2便士;我可能错了——我可能正朝着正确的方向前进,但还没有到达那里——我只是想帮忙
Using reader As XmlTextReader = New XmlTextReader(xdoc.OuterXml, XmlNodeType.Document, Nothing)
Dim xData As New OrderResults_Class
While reader.Read()
If reader.IsStartElement() Then
LogDebug.Append(vbCrLf & "Row: " & x & " Is Start: " & reader.IsStartElement() & " Node Type: " & reader.NodeType() & " Element: " & reader.Name & " >> Attributes: " & reader.HasAttributes.ToString & " Value: " & Left(reader.Value, 100))
ele = reader.Name
Select Case ele
Case "Attachment"
'LogDebug.Append(vbCrLf & "Row: (" & a & ") " & x & " Node Type: " & reader.NodeType() & " Element: " & reader.Name & " >> Attributes: " & reader.HasAttributes.ToString & " Value: " & Left(reader.Value, 100))
If reader.HasAttributes Then
Dim xDataImg As New NVMSOrderResults_Images_Class
Dim myImage() As Byte = ConvertImageFromBase64(reader.GetAttribute("Image"))
With xDataImg
.JobID = CheckOrder
.ImageRef = reader.GetAttribute("imageID")
.FileNumber = rs("FileNumber").ToString
.ImageDescription = reader.GetAttribute("ImageNote")
.ImageType = reader.GetAttribute("extension")
.ImageFile = myImage
End With
Dim ImgRet As String = Process_OrderResults_Images(xDataImg)
If IsNumeric(ImgRet) Then
LogMsg = "[" & rs("FileNumber").ToString & "] Photo Received: " & ImgRet
Else
LogMsg = "[" & reader.GetAttribute("imageID") & "] Error processing photo: " & ImgRet
End If
AppLogging.WriteTableLog(CheckOrder, LogMsg)
End If
Case "FinalReport"
If reader.HasAttributes Then
With xData
.JobID = CheckOrder
.LineItemID = reader.GetAttribute("LineItemID")
.FileNumber = reader.GetAttribute("FileNumber")
.PropertyID = reader.GetAttribute("PropertyID")
.PropAddress = reader.GetAttribute("PropAddress")
.PropCity = reader.GetAttribute("PropCity")
.PropState = reader.GetAttribute("PropState")
.PropZip = reader.GetAttribute("PropZip")
.Service = reader.GetAttribute("ServiceName")
End With
'LogDebug.Append(vbCrLf & "Row: (" & i & ") " & x & " Node Type: " & reader.NodeType() & " Element: " & reader.Name & " >> Attributes: " & reader.HasAttributes.ToString & " Value: " & Left(reader.Value, 100))
End If
Case "DataCapture"
xData.DataCollection = reader.ReadInnerXml
End Select
ElseIf reader.NodeType = XmlNodeType.Attribute Then
LogDebug.Append(vbCrLf & "This is an Attib: " & ele & " Is Start: " & reader.IsStartElement() & " Node Type: " & reader.NodeType() & " Element: " & reader.Name & " >> Attributes: " & reader.HasAttributes.ToString & " Value: " & Left(reader.Value, 100))
ElseIf reader.NodeType = XmlNodeType.Text Then
If ele = "PDFReport" Then
xData.PDFReport = ConvertImageFromBase64(reader.Value)
'Save Order Results ///////////////////////////
Dim ResultRet As String = Process_OrderResults(xData)
If IsNumeric(ResultRet) Then
LogMsg = "[" & rs("FileNumber").ToString & "] Job Successfully Received: " & CheckOrder
Else
LogMsg = "[" & rs("FileNumber").ToString & "] Error processing results: " & ResultRet
End If
AppLogging.WriteTableLog(CheckOrder, LogMsg)
End If
End If
x += 1
End While
'// Write Debugging Text ////////////////////////////////////////////
AppLogging.WriteTableLog(CheckOrder, LogDebug.ToString)
y += 1
End Using