从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次运行也需要很长时间。
从上面显示的内容来看,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");
或者,你可以只提取你需要使用正则表达式的一部分:
是的,多根是一个问题(运行多个脚本都会给自己的根目录),但是你也有普通的文本,比如在repsonse开始时IP地址是:10.3.3.1',最后也是类似的东西。 –
正则表达式也是一个好主意,但它似乎并没有拿起'
只要你将它包装在开始和结束标记中,'IP Address is:10.3.3.1'部分不应该成为第一种方法的问题,正如我上面演示的那样。如果额外文本包含 JLRishe
是无法修复问题在根?它看起来像有人忘记了调试信息 –
是的,我想到了这一点,但唯一的办法就是要求HP ILO devleopers为我做到这一点,这是不会发生的。另一种方法是将XML解析为文本并且处理字符串操作,但这太容易出错。 –