【问题标题】:data at the root level is invalid. line 1 position 1 in XML根级别的数据无效。 XML 中的第 1 行位置 1
【发布时间】:2018-10-01 12:11:12
【问题描述】:

我正在尝试将文档提交给特定服务。该文档为 .doc 格式。我必须将其转换为 .pdf,然后为创建的 pdf 文档创建一个 xml,然后提交 XML 文档。 这是我的代码:

 public string CommitDocumentToRepository(string extension, byte[] fileBytes)
    {
        //Convert to PDF
        byte[] loPDFFileBytes;

        ConversionService.ContentResponse loResponse = new DocumentAdapter.ConversionService.ContentResponse();

        using (ConversionService.CustomPDFSoapClient loConversionServiceClient = new DocumentAdapter.ConversionService.CustomPDFSoapClient())
        {
            loResponse = loConversionServiceClient.OfficeToPDFContent(fileBytes, extension);
            loPDFFileBytes = loResponse.ContentPDF;
        }

        if (loPDFFileBytes != null)
        {
            xform loDocContainer = new xform();
            xformInstance loDocProperties = new xformInstance();

            loDocProperties.FIRST_NAME= this.FirstName;
            loDocProperties.LAST_NAME= this.LastName;
            loDocProperties.SEX = this.Sex;


            loDocContainer.instance = loDocProperties;

            string lsTempFile = System.IO.Path.GetTempFileName();
            string lsXMLofProperties = loDocContainer.Serialize();

            XmlDocument loDoc = new XmlDocument();


            loDoc.LoadXml(lsXMLofProperties);
            loDoc.Save(lsTempFile);

            byte[] loFilePropertiesXML = Common.StreamFile(lsTempFile);
            string lsReturnValue = string.Empty;

            try
            {
                using (ISCommittalService.CommittalSoapClient loCommittalServiceClient = new DocumentAdapter.ISCommittalService.CommittalSoapClient())
                {
                    lsReturnValue = loCommittalServiceClient.CommitDocumentByte(loPDFFileBytes, ".PDF", loFilePropertiesXML);
                }
            }
            catch (Exception loException)
            {
                ADConnectionException loConnectionException = new ADConnectionException(loException);
                throw loException;
            }

            return lsReturnValue;
        }
        else
            return string.Empty;


    }

我收到此错误“服务器无法处理请求。---> 根级别的数据无效。第 1 行,位置 1。”来自 CommitDocumentByte 方法。

这是 XML:

<?xml version="1.0" encoding="utf-16"?>
<xform xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<instance>

<FIRST_NAME xsi:type="xsd:string">JOHN</FIRST_NAME>
<LAST_NAME xsi:type="xsd:string">DOE</LAST_NAME>

</instance>
</xform>

我做错了什么?请指教。

【问题讨论】:

  • 通常 (1,1) 处的错误表示缓冲区中根本没有 XML,例如检索 XML 的事务失败。
  • @JohnWu 我能够保存 XML 文件并检索它,因为我可以读取保存文件的字节。我认为如果检索 XML 的事务失败,我将无法获取文件的字节,对吗?

标签: c# asp.net xml xml-parsing


【解决方案1】:

文档为 .doc 格式。

DOC 文件不是 XML;你不能用 XML 解析器来解析它们。

DOCX 文件是 XML (OOXML),但仅在从其开放打包约定包装中提取它们之后。

您继续发布的 XML 既不是 DOC 也不是 DOCX。如果您在该文件上收到第 1 行位置 1 错误,请首先绝对确保您发送给解析器的确实是该文件,而不是空缓冲区/字符串或其他一些非 XML 文档。然后确保您正确设置了字符编码。 (你确定是 utf-16 而不是 utf-8?)

【讨论】:

  • 原始文档是 .doc 但我将其转换为 .pdf 然后转换为 XML 文件并发布了我尝试上传的 XML 文件,但我同意您的观点,我怀疑也许问题在于编码。第一行是由 itslef 使用 xmlDocument 添加的。您知道如何将其从 utf-16 更改为 utf-8?
  • 我尝试了您建议的链接中的示例,但它给了我相同的错误消息。根级别的数据无效。第 1 行位置 1
  • 向我们展示 exacthex 转储(在之前记录并检查解析——不要假设之前正在读取的磁盘上的文件就是正在解析的文件)要提供给解析器的数据。
  • 我在帖子中分享的XML文件是我在解析之前得到的
  • 通过将代码发布到日志输出来证明这一点,并向我们展示数据的 hex 转储
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2011-10-28
  • 1970-01-01
  • 2018-03-30
  • 2013-07-21
  • 1970-01-01
相关资源
最近更新 更多