【问题标题】:XML formatting from HTTP response来自 HTTP 响应的 XML 格式
【发布时间】:2013-01-05 14:46:17
【问题描述】:

我正在使用一些 asp.net/c# 和一些我发布的 HP ILO 脚本,然后我得到一个响应(应该是 XML)

很遗憾,如果 XML 格式不正确,则响应会因错误而无法使用 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>...

所以我关心的数据都在&lt;GET_EMBEDDED_HEALTH_DATA&gt; 中,如果我删除了不正确的语法,它可以很好地与 XML 解析器配合使用。

我的问题是如何只提取/格式化我需要的数据? 我知道我可能会将不正确的 xml 响应保存到文本文件中,对其进行格式化,然后 xml 对其进行解析,但是有更好/更快的方法吗?

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

【问题讨论】:

  • 不可能从根本上解决问题吗?好像有人忘记了调试消息
  • 是的,我已经想到了,但唯一的办法是让 HP ILO 开发人员为我做这件事,这不会发生。另一种方法是将 XML 解析为文本并搞乱字符串操作,但这太容易出错了。

标签: c# asp.net xml parsing httpresponse


【解决方案1】:

从上面显示的内容来看,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");

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

string healthDataXml = Regex.Match(output, 
    "<GET_EMBEDDED_HEALTH_DATA>.*</GET_EMBEDDED_HEALTH_DATA>", RegexOptions.Singleline).ToString();

【讨论】:

  • 是的,多个根是一个问题(运行多个脚本,它们都给出了自己的根),但您也有普通文本,例如 IP Address is: 10.3.3.1 在响应的开头和结尾处的类似内容。
  • 正则表达式也是一个好主意,但它似乎没有选择&lt;GET_EMBEDDED_HEALTH_DATA&gt; 标签,因为它们会从响应中返回转义字符,例如\t\r\n\t&lt;GET_EMBEDDED_HEALTH_DATA&gt;。如何解决这个问题
  • IP Address is: 10.3.3.1 部分对于第一种方法来说应该不是问题,只要您将它包装在开始和结束标记中,就像我上面演示的那样。该额外文本会成为问题的唯一情况是它包含
  • 我认为正则表达式不起作用的原因可能是您尝试提取的部分跨越多行,在这种情况下您需要使用 RegexOptions.Singleline 选项。我已经相应地修改了上面的代码。
  • 你是对的。在 RegexOptions.Singleline 之后它工作得很好。再次感谢:)
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
相关资源
最近更新 更多