0

私はいくつかの asp.net/c# といくつかの HP ILO スクリプトを使用しています。

残念ながら、応答が正しくフォーマットされていない 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");

または、Regex を使用して必要な部分だけを抽出することもできます。

string healthDataXml = Regex.Match(output, 
    "<GET_EMBEDDED_HEALTH_DATA>.*</GET_EMBEDDED_HEALTH_DATA>", RegexOptions.Singleline).ToString();
于 2013-01-05T19:01:18.860 に答える