2013-05-08 111 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")