【问题标题】:XDocument.Load generates error: "Data at the root level is invalid. Line 1, position 1."XDocument.Load 生成错误:“根级别的数据无效。第 1 行,位置 1。”
【发布时间】:2014-01-01 06:08:35
【问题描述】:

我收到以下错误:

"Data at the root level is invalid. Line 1, position 1."

这里是WEB API部分代码:

//POST api/RunningValue_Import
public object PostRunningValue(HttpRequestMessage xml)
{
    try
    {
        #region Retrieve XML string and Create XDocument

        //the method below generates the same error:
        //string tempXmlString = xml.Content.ReadAsStringAsync().Result;
        //TextReader tr = new StringReader(tempXmlString);
        //XDocument doc = XDocument.Load(tr);

        XDocument doc = XDocument.Load(xml.Content.ReadAsStreamAsync().Result); //<=== ERROR!

        #endregion

jQuery:

var inputText = inputText.replace(/ /g, ''); //eliminate spaces
inputText = inputText.replace(/\"/g, '\\"'); //escape double quotes

$.ajax({
    type: "POST",
    url: reqUrl,
    data: inputText,
    datatype: "text",
    contentType: "text/xml"
});

inputText 变量内容:

inputText = "\\\"<?xmlversion=\\\"1.0\\\"encoding=\\\"utf-8\\\"standalone=\\\"yes\\\"?>\n<server>\n<networkAdapters>\n<networkAdapterid=\\\"3d9c0d9d-d353-4d78-b034-b29f2dd824a0\\\">\n</networkAdapter>\n</networkAdapter>\n</server>\\\""

原始 XML 字符串传递:

"<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<server>
  <networkAdapters>
    <networkAdapter id="3d9c0d9d-d353-4d78-b034-b29f2dd824a0">
    </networkAdapter>
  </networkAdapter>
</server>"

【问题讨论】:

  • 您实际上在 XML 数据周围传递引号?你不应该。
  • 哦,谢谢!现在我得到:“名称中不能包含 '=' 字符十六进制值 0x3d” .... 现在正在研究...
  • 您也不应该在 XML 中放置 \n 字符。服务器不在乎它是否漂亮。
  • 它在抱怨 "=" ;我也删除了 /n :-)
  • @Max 随时回答您自己的问题并接受它。它可能会帮助将来遇到同样问题的人

标签: xml asp.net-web-api linq-to-xml


【解决方案1】:

删除所有空格会给您带来问题。如果我取消转义引号和斜杠,您会发现它不是有效的 XML:

<?xmlversion="1.0"encoding="utf-8"standalone="yes"?><server><networkAdapters><networkAdapterid="3d9c0d9d-d353-4d78-b034-b29f2dd824a0"></networkAdapter></networkAdapter></server>

如果您尝试对其进行格式化以提高可读性,则如下所示:

<!-- This declaration is invalid without spacing -->
<?xmlversion="1.0"encoding="utf-8"standalone="yes"?>
<server>
    <networkAdapters>
        <!-- This should read "networkAdapter id" not "networkAdapterid" -->
        <networkAdapterid="3d9c0d9d-d353-4d78-b034-b29f2dd824a0"></networkAdapter>
    <!-- This should be a closing bracket for networkAdapters, not networkAdapter -->
    </networkAdapter>
</server>

【讨论】:

  • 元素之间缺少空格或换行完全没有关系。
  • @MarcinJuraszek 它取决于解析器。大多数解析器在文档声明中需要空格。 &lt;?xmlversion 与“
  • 哦,我没有意识到?xml 和`version 之间的空格不见了。你是对的,这对于使它成为有效的 XML 是绝对必要的。
猜你喜欢
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2018-03-30
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多