2015-05-29 94 views
0

我有一個應用程序在C#中,我正在檢查客戶端和服務器之間的SOAP消息。如何解析XML元素不總是具有相同的結構

請求和響應始終是XML序列化。消息的一部分具有的操作方法,我需要得到公正的方法,但我已經看到了,我需要的XML元素並不總是具有相同的名稱:

下面是一個例子:

這是,我需要解析的元素:

<a:Action s:mustUnderstand="1">http://tempuri.org/IMember/GetAuthorizations</a:Action> 

它也可以有時會出現這樣的:

<Action d1p1:mustUnderstand="1" xmlns:d1p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">http://tempuri.org/IMember/GetAuthorizations</Action> 

我需要得到的是URL的方法,在這種情況下,我需要解析這個元素,所以我可以得到GetAuthorizations

我如何能既解析任何線索?我不知道第一種方式或第二種方式。

+0

看來他們都在同一個XML,但具有不同應用的命名空間。你如何解析XML?一個合適的XML解析器應該考慮這些名稱空間。 – GolezTrol

+0

你可以把它當作一個字符串嗎?如果一切都失敗了,那麼你可以很容易地以這種方式進行區分,然後將它拖曳到正確的解析器中......如果這確實是你的意圖。 – johnjps111

+0

其實是一個字符串 – VAAA

回答

0

試試這個

  string input = "<a:Action xmlns:a=\"http://tempuri.org\" xmlns:s=\"http://tempuri.org\" s:mustUnderstand=\"1\">\"http://tempuri.org/IMember/GetAuthorizations\"</a:Action>"; 
      XDocument doc = XDocument.Parse(input); 

      string mustUnderstand = doc.Elements().Where(x => x.Name.LocalName == "Action").Attributes().Where(y => y.Name.LocalName == "mustUnderstand").FirstOrDefault().Value;​ 
相關問題