读取xml文件时出现错误
问题描述:
嗨,朋友们,希望所有人都做得很好。在阅读vb.net中的xml文件时遇到问题,即给出错误消息"Data at the root level is invalid. Line 860, position 18."
我的xml文件在读取时出错,如下所示。读取xml文件时出现错误
实际上,我使用以下代码在0123b的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>
请求。为我找到解决方案。提前致谢。
答
你可以试试下面的短版下载文件:
Using client As New System.Net.WebClient
client.DownloadFile("http://xyz", "c:/GetXml.xml")
End Using
+0
看到这个:http:///stackoverflow.com/questions/1576534/how-to-read-xml-data-from-a-url-by-using-vb-net-and-save/1576729#1576729 – 2009-10-17 01:55:33
答
在写出来之后,您的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?
答
你的代码有一些缺陷:
- 它限制了文件的长度为100000个字节(如果它不再你将最终得到一个破损的xml)
- 异常安全,一些句柄在异常情况下不会关闭,如果在例外后第二次进入这个例程,XML可能被锁定(取决于GC处置了这条街今年已经与否)
我会改写循环是这样的:
- 获取webstream
- 打开文件 - > FILESTREAM
- 写入该文件分段
- 关闭文件&流
@pravakar,你怎么能坚持你以前的帖子? http://stackoverflow.com/questions/1576534/how-to-read-xml-data-from-a-url-by-using-vb-net-and-save/1576729#1576729 – 2009-10-17 01:54:54