【问题标题】:Error "Data at the root level is invalid" after transformation, while doing a LoadXML转换后错误“根级别的数据无效”,同时执行 LoadXML
【发布时间】:2012-11-27 21:02:56
【问题描述】:

我正在尝试使用以下代码行进行一些 XSLT 转换,将 XML 转换为 XML。当我尝试从转换后的 XML 创建 XMLDocument 对象时,出现错误

根级别的数据无效。第 1 行,位置 1。

 Dim outputXML As New XmlDocument

        Dim stream As New MemoryStream
        Dim writer As XmlTextWriter = New XmlTextWriter(stream, System.Text.UnicodeEncoding.UTF8)

        Dim navigator As XPathNavigator = illustratePlusXML.CreateNavigator()
        Dim transormer As XslCompiledTransform = New XslCompiledTransform()
        transormer.Load(ConfigurationManager.AppSettings("XSLT_File_Path"))
        transormer.Transform(navigator, Nothing, writer)

        Dim output As String = System.Text.UnicodeEncoding.UTF8.GetString(stream.ToArray())
        outputXML.LoadXml(output)

        Return outputXML

我可以找到一个特殊字符(方形框),我认为这是导致错误的原因。附加的输出 xml 的快照。有人可以建议吗?

【问题讨论】:

  • 如果你使用(XslCompiledTransform 的默认)utf-16 编码,我想你不会有这些问题。
  • 您是否尝试过在不指定编码的情况下打开 XmlTextWriter?
  • @DimitreNovaatchev 我的 XMl 使用的是 UTF-8 编码,我还应该尝试默认编码吗?
  • @Anoop,我认为您根本不需要使用 MemoryStream。当从文件中读取字符时,它们会被转换为 .NET,并且任何 .NET 字符都是 UTF-16 格式——因此,这是自动为您完成的,除此之外您无需关心和执行任何操作。
  • @DimitreNovaatchev 感谢您的帮助。是的,使用 Martin 给出的代码

标签: vb.net xslt xmldocument


【解决方案1】:

如果您想填充 XmlDocument 作为 XSLT 转换的结果,那么只需这样做

Dim resultDoc As New XmlDocument()
Using xw As XmlWriter = resultDoc.CreateNavigator().AppendChild()
        Dim navigator As XPathNavigator = illustratePlusXML.CreateNavigator()
        Dim transormer As XslCompiledTransform = New XslCompiledTransform()
        transormer.Load(ConfigurationManager.AppSettings("XSLT_File_Path"))
        transormer.Transform(navigator, Nothing, xw)  
        xw.Close()
End Using

无需使用 MemoryStream。如果您确实认为需要使用 MemoryStream,请确保在调用 Load 方法之前将其 Position 重置为 0

【讨论】:

  • 谢谢!这样可行。您能否建议问题中发布的代码出了什么问题?我做错了编码还是你提到的内存流位置?
  • 我认为问题在于编码和字节顺序标记进入您的方式。如果你想使用 MemoryStream 然后写入它并简单地允许 XML 解析器从它加载,例如memStream.Position = 0 : resultDoc.Load(memStream).
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 2019-12-15
  • 2014-01-17
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多