1

変な形式の XML ファイルを読むのに助けが必要です。ノードと属性が構造化されているため、XMLException エラーが発生し続けます (少なくとも、出力ウィンドウにはそのように表示されます。ブレークポイントは、確認できるように起動を拒否しています)。とにかく、ここに XML があります。誰もが前にこのようなことを経験しましたか?

<ApplicationMonitoring>
<MonitoredApps>
        <Application>
            <function1 listenPort="5000"/>
        </Application>
        <Application>
            <function2 listenPort="6000"/>
        </Application>
</MonitoredApps>
<MIBs>
    <site1 location="test.mib"/>
</MIBs> 
<Community value="public"/>
<proxyAgent listenPort="161" timeOut="2"/>
</ApplicationMonitoring>

乾杯

編集:解析コードの現在のバージョン(ファイルパスが短縮されています-実際にはこれを使用していません):

XmlDocument xml = new XmlDocument();
xml.LoadXml(@"..\..\..\ApplicationMonitoring.xml");

string port = xml.DocumentElement["proxyAgent"].InnerText;
4

3 に答える 3

1

XML をロードする際の問題はxml.LoadXml、xml ドキュメントをファイル参照ではなく文字列として渡すことを期待していることです。

代わりに次を使用してみてください。

xml.Load(@"..\..\..\ApplicationMonitoring.xml");

基本的に、元のコードでは、xml ドキュメントが

..\..\..\ApplicationMonitoring.xml

これで、解析例外が発生する理由がわかると思います。:)私はあなたのxmlドキュメントと変更されたロードでこれをテストしましたが、正常に動作します(あなたの内側のテキストが何も返さないという事実で唯一のボリビア人が指摘した問題を除いて.

完全を期すために、おそらく必要です:

XmlDocument xml = new XmlDocument();
xml.Load(@"..\..\..\ApplicationMonitoring.xml");
string port = xml.DocumentElement["proxyAgent"].Attributes["listenPort"].Value;
//And to get stuff more specifically in the tree something like this
string function1 = xml.SelectSingleNode("//function1").Attributes["listenPort"].Value;

期待どおりに動作しない ToString メソッドではなく、属性で Value プロパティを使用していることに注意してください。

xml からデータを抽出する正確な方法は、おそらくそれで何をしているかによって異なります。たとえば、これを実行して foreach で列挙するアプリケーション ノードのリストを取得することができますxml.SelectNodes("//Application")

extdacting で問題が発生している場合、これはおそらく別の質問の範囲です。これは、XML ドキュメントをロードする方法に関するものだったからです。

于 2012-07-25T15:44:45.030 に答える
0
xml.DocumentElement["proxyAgent"].InnerText;

proxyAgent 要素は自己終了です。InnerText は、XML 要素内の文字列を返します。この場合、内部要素はありません。

InnerText ではなく、要素の属性にアクセスする必要があります。

于 2012-07-25T15:37:53.013 に答える
0

これを試して:

string port = xml.GetElementsByTagName("ProxyAgent")[0].Attributes["listenPort"].ToString();

または、Linq to XML を使用します。

http://msdn.microsoft.com/en-us/library/bb387098.aspx

そして...あなたのXMLは不正な形式ではありません...

于 2012-07-25T15:48:32.887 に答える