如何在xml文档中替换HEX字符?

时间:2010-06-01 14:21:46

标签: .net asp.net xml vb.net hex

我正在尝试将xml文件导入vb.net XmlDocument但收到错误:

  

'。',十六进制值0x00,是无效字符。第94行,第1位。

我想知道是否有办法替换十六进制字符0x00
以下是文件在第94行结束的第92,93,94行

92 |    </request>
93 |</rpc> <!-- XML Finishes here -->
94 |

感谢您的帮助。

编辑:添加用于获取文件的代码。

Dim fs As FileStream = File.Open(FileName, FileMode.Open, FileAccess.Read)
Dim buffer(fs.Length) As Byte
fs.Read(buffer, 0, fs.Length)
Dim xmlString As String = System.Text.UTF8Encoding.UTF8.GetString(buffer)
fs.close()

Doc.LoadXml(xmlString.Trim)

我正在使用System.Text.UTF8Encoding.UTF8.GetString(缓冲区),因为文件编码并不总是UTF-8。遗憾的是,我无法控制xml文件,因为我们从外部源接收它,不会改变文件生成方式,因为它被其他人使用。

我想要做的是基本上将文件放入字符串然后从最后一个&gt;中删除它的结尾。然后追加我自己的&gt;或者只用空字符串替换HEX字符。

2 个答案:

答案 0 :(得分:3)

好的,开始使用您的代码来读取文件已经破了。它通常会起作用,但你应该永远忽略来自Stream.Read的返回值。您还应该使用Using语句或Finally块关闭流。幸运的是,有一种非常简单的替换代码的方法:

Dim xmlString As String = File.ReadAllText(FileName)
Doc.LoadXml(xmlString)

另一方面,您声称编码不是始终是UTF-8 - 那么为什么您总是尝试使用UTF-8?如果你把它作为普通字节加载它实际上会更好:

Dim bytes As Byte() = File.ReadAllBytes(FileName)
Using stream As MemoryStream = new MemoryStream(bytes)
    Doc.Load(stream)
End Using

或更容易:

Doc.Load(FileName)

现在,如果你这样做,你仍会得到同样的错误吗?如果是这样,文件本身就坏了......

答案 1 :(得分:0)

如果您的XML无效,那么在将其解析为XML文档之前,您必须将其更正为常规二进制文件。