嗨朋友们希望所有人都做得好。我在vb.net中读取xml文件时遇到问题,即在阅读时给出错误消息"Data at the root level is invalid. Line 860, position 18."
我的xml文件有错误,如下所示。
实际上我使用httpwebresponse
中的vb.net中的以下代码保存此文件。
Try
Dim strUrl As String = "http://xyz"
Dim wr As HttpWebRequest = CType(WebRequest.Create(strUrl), HttpWebRequest)
Dim ws As HttpWebResponse = CType(wr.GetResponse(), HttpWebResponse)
ws.ContentType = "UTF-8"
Dim str As Stream = ws.GetResponseStream()
Dim inBuf(100000) As Byte
Dim bytesToRead As Integer = CInt(inBuf.Length)
Dim bytesRead As Integer = 0
While bytesToRead > 0
Dim n As Integer = str.Read(inBuf, bytesRead, bytesToRead)
If n = 0 Then
Exit While
End If
bytesRead += n
bytesToRead -= n
End While
Dim fstr As New FileStream("c:/GetXml.xml", FileMode.OpenOrCreate, FileAccess.Write)
fstr.Write(inBuf, 0, bytesRead)
str.Close()
fstr.Close()
Catch ex As WebException
Response.Write(ex.Message)
End Try
<?xml version="1.0" encoding="UTF-8" ?>
- <Result>
- <Jobs Found="58" Returned="50">
- <Job ID="8000009">
<Title>Water Infrastucture Professionals</Title>
- <Summary>
- <![CDATA[ Great Potential for Career Growth Rewardidng Salary package Great Potential for Career Growth Rewardidng Salary package Our client is major utilities entity who is searching for tradespeople with water, sewage, stormwater and related infrastructure network experience. This is an exciting role with excellent career benefits and an opportunity to utilise your extensive experience in field operations
]]>
</Summary>
<DateActive Date="2009-10-14T11:26:28-05:00">10/14/2009</DateActive>
<DateExpires Date="2009-11-13T21:33:33-05:00">11/13/2009</DateExpires>
<DateUpdated Date="2009-10-14 21:34:00">10/14/2009</DateUpdated>
- <Location>
<Country>xxx</Country>
<State>xxx</State>
<City>xxx</City>
<PostalCode>00000000</PostalCode>
</Location>
<CompanyName>Hudson</CompanyName>
<BuilderFields />
<DisplayOptions />
<AddressType>6</AddressType>
</Job>
- <Job ID="83678951" PositionID="61132478">
<Title>SENIOR CIVIL ENGINEER - ROADS AND HIGHWAYS</Title>
- <Summary>
- <![CDATA[ ARE YOU A CIVIL ENGINEER? THIS IS A RARE AND EXCITING OPPORTUNITY TO PROGRESS YOUR CAREER WITH A WELL ESTABLISHED AND GROWING COMPANY!!! ACT LOCATION EXCELLENT REMUNERATION MULTIPLE PROJECTS Our client is one of the worlds leading engineering consultancies with over forty year's experience across a wide range of disciplines. With an expanding project portfolio they are now seeking to employ an expe
]]>
</Summary>
<DateActive Date="2009-09-29T18:02:30-05:00">9/29/2009</DateActive>
<DateExpires Date="2009-10-29T23:36:33-05:00">10/29/2009</DateExpires>
<DateUpdated Date="2009-09-29 23:37:00">9/29/2009</DateUpdated>
- <Location>
<Country>Australia</Country>
<State>ACT</State>
<City>CANBERRA</City>
<PostalCode>2600</PostalCode>
</Location>
<CompanyName>Gemteq</CompanyName>
<BuilderFields />
<DisplayOptions />
<AddressType>6</AddressType>
</Job>
- <Job ID="83679392" PositionID="61132870">
<Title>Principal Mechanical Engineer</Title>
- <Summary>
- <![CDATA[ Canberra based Permanent Role Attractive salary package High Profile Organisation Our client is currently seeking a Principal's Mechanical Engineer to lead their team of professional mechanical services design engineers. Responsibilities You will be leading a team of engineers to: Develop technical and professional excellence. Use environmentally sustainable design practices. Manage a variety of pro
]]>
</Summary>
<DateActive Date="2009-09-29T17:57:34-05:00">9/29/2009</DateActive>
<DateExpires Date="2009-10-30T00:44:30-05:00">10/30/2009</DateExpires>
<DateUpdated Date="2009-09-30 00:45:00">9/30/2009</DateUpdated>
- <Location>
<Country>Australia</Country>
<State>ACT</State>
<City>Canberra</City>
<PostalCode>2600</PostalCode&gThe XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.
--------------------------------------------------------------------------------
Invalid at the top level of the document. Error processing resource 'file:///Z:/d8fb0c80-e45c-4207-97b0-47e4d6c314ad.xml'. ...
</Jobs></Result>>
t;
</Location>
<CompanyName>Human Touch Resource Group</CompanyName>
- <Salary>
<Max Value="30000">30,000.00</Max>
PLS。为我找到一个解决方案。提前谢谢。
答案 0 :(得分:1)
您可以尝试使用以下较短版本来下载文件:
Using client As New System.Net.WebClient
client.DownloadFile("http://xyz", "c:/GetXml.xml")
End Using
答案 1 :(得分:1)
您的代码存在一些缺陷:
我会用这种方式重写循环:
答案 2 :(得分:0)
您的XML文件在写完后是否正好长达100,000字节?如果是这样,那可能就是问题 - 您的代码目前仅适用于长达100,000字节的文件。而不是使用一个大缓冲区,最好重复读取响应并写入文件,直到没有更多的数据。这是一个复制流的C#方法 - 我会在一分钟内将它转换为VB:
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
如果不问题,您是否已在文本编辑器中加载文件并查看第860行,第18位?