我正在使用XDocument和XElement来读取XML。从visual studio 2012运行网站时,阅读没有问题。发布后我得到“Root element is missing”异常。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Xml.XmlException:缺少根元素。
请查看以下XML
<CTReport>
<ReportHeader>
<UserID>1508ac07-0070-46b9-84f4-533b83cb3770</UserID>
</ReportHeader>
<ReportInfoToDisplay>
<Report PlaceHolder="7">
<Info Name="Average Mix report" TranslatedText="" ShowPrice="1" />
<ReportControls>
<ControlInfo Type="Date" Name="Date" TranslatedText="" Data="!" />
<ControlInfo Type="Lookup" Name="Scale operator" TranslatedText="" Data="" />
<ControlInfo Type="Lookup" Name="Display Jobs of" TranslatedText="" Data="Normal!Layaway!" />
<ControlInfo Type="Combo" Name="SortBy" TranslatedText="SortBy" Data="Sort by mixer + product group!Sort by product group" />
</ReportControls>
</Report>
<Report />
<Report PlaceHolder="8">
<Info Name="Mix report" TranslatedText="" ShowPrice="0" />
<ReportControls>
<ControlInfo Type="Date" Name="Date" TranslatedText="" Data="!" />
<ControlInfo Type="Lookup" Name="Scale operator" TranslatedText="" Data="" />
<ControlInfo Type="Combo" Name="SortBy" TranslatedText="SortBy" Data="Sort by mixer + product group!Sort by product group" />
</ReportControls>
</Report>
<Report PlaceHolder="9">
<Info Name="Scale report" TranslatedText="" ShowPrice="0" />
<ReportControls>
<ControlInfo Type="Date" Name="Date" TranslatedText="" Data="!" />
<ControlInfo Type="String" Name="Job reference" TranslatedText="" Data="" />
<ControlInfo Type="String" Name="Job ID" TranslatedText="" Data="" />
<ControlInfo Type="Lookup" Name="Scale operator" TranslatedText="" Data="" />
</ReportControls>
</Report>
</ReportInfoToDisplay>
</CTReport>
XDocument xml = XDocument.Parse(reportXML);
reportXML是字符串。
请注意,从XML文件创建XDocument时没有异常
答案 0 :(得分:1)
问题几乎可以肯定,您尝试解析的XML与您上面发布的XML不符。
有几种情况:
CTReport
元素(即您在XML中有两组报告)CTReport
(所以在最高级别,您有ReportHeader
和ReportInfoToDisplay
CTReport
个元素,但是根级别还有一些其他元素。您可以做的最好的事情是在代码中添加一行,以便将reportXML
的内容输出到文本文件中,这样您就可以更好地查看它并确保它是什么&#39期待。您可以通过在尝试解析XML之前添加类似于下面的行来执行此操作:
System.IO.File.WriteAllText(@"<Put an output file path here>", reportXML);