从XML HTTP响应格式

问题描述:

我使用一些asp.net/c#和其中一些我张贴,然后我得到一个repsonse(这应该是XML)从XML HTTP响应格式

不幸的是如果没有正确格式化XML这样的响应HP ILO脚本由于错误,使用XML解析器是不可能的。

下面是一个示例输出:

IP Address is: 10.3.3.1 
<?xml version="1.0"?> 
<RIBCL VERSION="2.22"> 
    <RESPONSE 
     STATUS="0x0000" 
     MESSAGE='No error' 
    /> 
    <INFORM>Scripting utility should be updated to the latest version.</INFORM> 
</RIBCL> 
<?xml version="1.0"?> 
<RIBCL VERSION="2.22"> 
    <RESPONSE 
     STATUS="0x0000" 
     MESSAGE='No error' 
    /> 
</RIBCL> 
<GET_EMBEDDED_HEALTH_DATA> 
    <FANS> 
     <FAN>... 

,所以我关心的数据是内<GET_EMBEDDED_HEALTH_DATA>与XML解析器,如果我删除不正确的语法,正常工作的所有。

我的问题是如何拉/只格式我需要的数据? 我知道我可以将不正确的XML响应保存到一个文本文件,格式化它,然后xml解析它,但有没有更好/更快的方式做到这一点?

这样做连续100次运行也需要很长时间。

+0

是无法修复问题在根?它看起来像有人忘记了调试信息 –

+0

是的,我想到了这一点,但唯一的办法就是要求HP ILO devleopers为我做到这一点,这是不会发生的。另一种方法是将XML解析为文本并且处理字符串操作,但这太容易出错。 –

从上面显示的内容来看,XML部分本身是格式良好的,但文本包含多个XML声明和多个根。这些是唯一的问题还是其他地方存在真正的不良XML?

如果只有这些问题,这样的事情可能工作:

string declarationsRemoved = output.Replace("<?xml version=\"1.0\"?>", ""); 

XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<root>" + declarationsRemoved + "</root>"); 

XmlNode healthData = doc.SelectSingleNode("/root/GET_EMBEDDED_HEALTH_DATA"); 

或者,你可以只提取你需要使用正则表达式的一部分:

​​
+0

是的,多根是一个问题(运行多个脚本都会给自己的根目录),但是你也有普通的文本,比如在repsonse开始时IP地址是:10.3.3.1',最后也是类似的东西。 –

+0

正则表达式也是一个好主意,但它似乎并没有拿起''标签,因为它们从响应stirng中返回了转义字符,例如'\ t \ r \ n \ t '。如何解释 –

+0

只要你将它包装在开始和结束标记中,'IP Address is:10.3.3.1'部分不应该成为第一种方法的问题,正如我上面演示的那样。如果额外文本包含 JLRishe