0

我正在使用一些 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>...

因此,如果我删除了不正确的语法,我关心的所有数据都可以<GET_EMBEDDED_HEALTH_DATA>在 XML 解析器中正常工作。

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

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

4

1 回答 1

2

从上面显示的内容来看,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();
于 2013-01-05T19:01:18.860 回答