由于空值,无法加载xml

时间:2016-12-19 17:04:03

标签: c# xml c#-4.0 c#-3.0

我正在尝试加载以下XML值

<?xml version="1.0" standalone="yes"?>
<Data>
   <curmsg>
       <event> myevent </event>
       <clientid> 123456 </clientid>
       <appid> 1123456 </appid>
       <timestamp> December 13 2016 00:00:00 </timestamp>
       <clientname>  TEST ACCOUNT </clientname>   
       <accountnum> 123 </accountnum>   
       </backlink>    
       <key>AAAAC</key>
       <fileid>1234</fileid>   
       <filename>LKTEST1.1</filename>      
       <filesize>30</filesize>      
       <eekey>LKTEST</eekey>      
       <pjobid>DFSAQE3Z4</pjobid>    
       <filecategory>Proceed</filecategory>
   </curmsg>
</Data>

C#代码:

XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xmldata);

上述LoadXml函数抛出异常,因为<backlink>标记只有结束标记。它在我提供起始标记时工作,但我的要求是当标记没有起始标记(空值)时我想加载XML。

2 个答案:

答案 0 :(得分:2)

你做不到。

为什么呢?因为</backlink>不是空标记。这只是一个语法错误。 <backlink/>是一个空标记。

您可能想要使用正确的XML文件。

答案 1 :(得分:1)

这是无效的XML,没有内置的XML工具可以读取它。

您的选择:

  • 制作生成该文件的人以创建有效的XML
  • 使用string.Replace替换损坏的节点,然后将其作为XML加载(hacky,稍后当文本文件的作者在那里引入更多无效的XML时可能会破坏)。
  • 使用更宽容的解析器 - 即HtmlAgilityPack明确设计用于处理损坏的HTML,并且可能能够从文本文件中生成部分树。