2013-05-08 108 views
2

我有這個字符串XML得到的字符串XML節點值

string innerXml = @"<detail><WCFFaultExcepcion xmlns=""http://schemas.datacontract.org/2004/07/CIEL.DigiturnoMega.Entidades"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><ErrorId>b7e9d385-9118-4297-baca-db9ab00f3856</ErrorId><Message>Índice fuera de los límites de la matriz.</Message></WCFFaultExcepcion></detail>"; 

這是stringXML

<detail> 
    <WCFFaultExcepcion xmlns="http://schemas.datacontract.org/2004/07/CIEL.DigiturnoMega.Entidades" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
     <ErrorId>b7e9d385-9118-4297-baca-db9ab00f3856</ErrorId> 
     <Message>Índice fuera de los límites de la matriz.</Message> 
    </WCFFaultExcepcion> 
</detail> 

我想要的是讓細節變量的值,我試圖用這個例子,但所有返回null零點計數,你能幫助我嗎?

private static void Example() 
     { 
      string innerXml = @"<detail><WCFFaultExcepcion xmlns=""http://schemas.datacontract.org/2004/07/CIEL.DigiturnoMega.Entidades"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><ErrorId>b7e9d385-9118-4297-baca-db9ab00f3856</ErrorId><Message>Índice fuera de los límites de la matriz.</Message></WCFFaultExcepcion></detail>"; 

      XmlDocument doc = new XmlDocument(); 
      doc.LoadXml(innerXml); 

      XmlNode node = (XmlNode)doc.DocumentElement; 
      XmlNode optionalNode = node.SelectSingleNode("/detail/WCFFaultExcepcion"); 
      XmlNode optionalNode1 = node.SelectSingleNode("detail/WCFFaultExcepcion"); 
      XmlNode optionalNode2 = node.SelectSingleNode("/detail/WCFFaultExcepcion/ErrorId"); 
      XmlNode optionalNode3 = node.SelectSingleNode("detail/WCFFaultExcepcion/ErrorId"); 
      XmlElement optional = doc.SelectSingleNode(@"/detail/WCFFaultExcepcion/ErrorId") as XmlElement; 
      XmlElement optiona2 = doc.SelectSingleNode(@"detail/WCFFaultExcepcion/ErrorId") as XmlElement; 
      XmlNode xNode = doc.DocumentElement.SelectNodes("ErrorId")[0]; 
      XmlNodeList xnList = doc.SelectNodes("/detail/WCFFaultExcepcion"); 
      XmlNodeList xnList1 = doc.SelectNodes("detail/WCFFaultExcepcion"); 
      XmlNodeList xnList2 = doc.SelectNodes("/detail/WCFFaultExcepcion/ErrorId"); 
      XmlNodeList xnList3 = doc.SelectNodes("detail/WCFFaultExcepcion/ErrorId"); 
     } 
+1

我不明白你真正想要的到底。你能給我們一個例子嗎?你是什麼意思,「我想要的是獲得詳細標籤的價值」。你期待節點嗎?節點列表?一個字符串?一串字符串?以及它們應該是什麼? – 2013-05-08 23:31:04

回答

8

我認爲這可能是你的解決方案:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml(innerXml); 

XmlNodeList ErrorIdTags = doc.GetElementsByTagName("ErrorId"); 
if(ErrorIdTags.Count <= 1) 
{ 
    // The tag could not be fond 
} 
else 
{ 
    // The tag could be found! 
    string ErrorId = ErrorIdTags[0].InnerText; 
} 
+0

感謝Swen,它是如何完成的,但正如我所知,在所有情況下,我都會收到ErrorId標記,我決定使用此代碼: 'XmlDocument doc = new XmlDocument(); doc.LoadXml(innerXml); string errorIdTags = doc.GetElementsByTagName(「ErrorId」)[0] .InnerText;' – foluis 2013-05-09 22:19:16

+0

我仍然會建議您檢查標籤是否存在,儘量覆蓋儘可能多的錯誤。 – 2013-05-10 13:27:41

+0

當ErrorIdTags.Count == 1存在'ErrorIdTags [0]'時,'ErrorIdTags.Count <= 1'不會給出'true'。它應該是'ErrorIdTags.Count <1'! – 2017-03-17 09:02:46

0

第一次嘗試XmlNode node = (XmlNode)doc.DocumentElement;應該工作,應該包含兒童。嘗試XmlNode firstChildNode = node.FirstChild; ...這將讓你成爲第一個孩子,並且不會爲空/空。

但是,當使用xpath時,由於已定義的名稱空間,您將遇到問題。您必須在創建文檔新的命名空間,並指定http://schemas.datacontract.org/2004/07/CIEL.DigiturnoMega.Entidades的簡寫(如:sh)...然後在您的XPath以後你可以像去doc.SelectSingleNode(@"/detail/sh:WCFFaultExcepcion/sh:ErrorId")