2012-07-25 99 views
1

我需要一些幫助來閱讀奇文件格式的XML文件。由於節點和屬性的結構方式不同,我一直在遇到XMLException錯誤(至少,這是輸出窗口告訴我的;我的斷點拒絕引發,以便我可以檢查它)。無論如何,這是XML。任何人都曾經歷過這樣的事情?讀奇文格式的XML文件C#

<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> 

乾杯

編輯:解析代碼的當前版本(文件路徑縮短 - Im不實際使用這一個):

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

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

在哪裏解析代碼? – James 2012-07-25 15:33:33

+3

''似乎沒有結束標記 – 2012-07-25 15:34:04

+1

如果這是整個文檔,那是非法的XML,因爲ApplicationMonitoring根元素永遠不會關閉,這可能會解釋您的問題。這是你正在解析的全部內容嗎? – Omaha 2012-07-25 15:34:33

回答

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; 

注意該屬性的使用Value屬性,而不是ToString方法,不會做你期待什麼

你究竟如何提取數據從XML是。可能取決於你正在用它做什麼,例如你可能想要獲得一個應用程序節點列表來枚舉一個通過這樣做的foreach xml.SelectNodes("//Application")

如果您在extacting的東西時遇到問題,但這可能是另一個問題的範圍,因爲這只是關於如何獲取XML文檔加載。

+0

這很好用;)我可能會問你如何建議閱讀函數名稱,看看每個不同?我懷疑xml.DocumentElement [「」]將工作.... – Skulmuk 2012-07-25 15:48:36

+0

我已經添加了一些關於選擇(包括使屬性選擇明確,因爲使用整數是有點脆弱,如果屬性更改順序或某物)。不要忘了你可以投票給你一個對你有幫助的答案,並且我還建議在另一個問題上詢問關於通過XPath提取數據的任何問題。 – Chris 2012-07-25 16:00:08

0
xml.DocumentElement["proxyAgent"].InnerText; 

的proxyAgent元件是自閉合。 InnerText將返回XML元素內部的字符串,在這種情況下,沒有內部元素。

您需要訪問元素的屬性,而不是InnerText。

+0

你的意思是這樣的? string port = xml.DocumentElement [「proxyAgent」]。Attributes [0] .ToString(); – Skulmuk 2012-07-25 15:40:37