2014-12-06 40 views
0

值如何從以下XML響應如何從XML響應

<?xml version="1.0" encoding="utf-8" ?> 
    - <controls> 
     <ManualCalib>0</ManualCalib> 
     <MaintMode>0</MaintMode> 
     <AntEnable>0</AntEnable> 
     <ChgBeamEnable>1</ChgBeamEnable> 
     <ModemResponse>options show ETH0_1 [ETH0_1] address = 10.171.74.1 netmask = 255.255.255.0 rip_enabled = 0 [RMT:416] [email protected]:::ffff:127.0.0.1;4709 ></ModemResponse> 
     </controls> 
+2

你到目前爲止嘗試了什麼? – mihai 2014-12-06 07:03:38

回答

0

最好的解決辦法是找出ModemResponse字符串的確切結構得到地址和子網掩碼值。你可以寫一個正則表達式來捕捉你需要的值,或者有更強大的解析邏輯。如果你不知道確切的結構,你可以編寫一些這樣的hacky代碼,以在大多數情況下完成它:

 var xd = XDocument.Parse(xml); 
     var modemResponse = xd.Element("controls").Element("ModemResponse").Value; 
     string address = string.Empty, netmask = string.Empty; 
     var tokens = modemResponse.Split(new[] { ' ', '=' }, StringSplitOptions.RemoveEmptyEntries); 
     for (int i = 0; i < tokens.Length; i++) 
     { 
      var token = tokens[i]; 
      switch (token) 
      { 
       case "address": 
        if (i + 1 < token.Length) 
         address = tokens[i + 1]; 
        break; 
       case "netmask": 
        if (i+1 < tokens.Length) 
         netmask = tokens[i+1]; 
        break; 
      } 
     } 

     Console.WriteLine("address: {0}, netmask: {1}", address, netmask);