【问题标题】:How to replace HEX character in an xml document?如何替换 xml 文档中的 HEX 字符?
【发布时间】:2010-06-01 14:21:46
【问题描述】:

我正在尝试将一个 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(buffer),因为文件编码并不总是 UTF-8。不幸的是,我无法控制 xml 文件,因为我们是从外部来源接收它的,而外部来源不会改变文件的生成方式,因为它被其他人使用。

我想要做的基本上是将文件放入字符串中,然后从最后一个 > 切掉它的末尾,然后附加我自己的 > 或者只是用空字符串替换 HEX 字符。

【问题讨论】:

  • 请显示您正在使用的代码 - 最好是在十六进制编辑器中显示的文件末尾。
  • 我最近用 0x00 和 0x01 得到了这个,我刚刚用 "" 替换它们......但一定有更好的方法,我很想看看每个人都有什么要说这个。看起来 XML 没问题,但是当用 SOAP 包装它时它会爆炸。
  • 我同意 Jon 的观点,一些代码会有所帮助,包括您从何处获取数据。数据末尾似乎有一些垃圾字符,可能是由于读取文件的代码中的一些错误。
  • 更新了用于加载 xml 文件的代码的问题。将搜索一个十六进制编辑器,看看是否也将十六进制放在那里。
  • 正如我所料,又一次打断了Read 电话。这是一个常见的错误,你并不孤单。 :)

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


【解决方案1】:

好的,首先您的读取文件的代码已损坏。它通常会起作用,但您应该永远忽略来自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)

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

【讨论】:

  • 我开始使用Doc.Load(File),这引发了编码问题,也引发了当前的十六进制问题。我会尝试您提出的其他建议,看看它们是否有效。
  • 使用Using stream As MemoryStream = new MemoryStream(bytes) 似乎已经修复了十六进制问题和编码问题。谢谢乔恩
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多