得到的字符串XML节点值
我有这个字符串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");
}
我认为这可能是你的解决方案:
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;
}
感谢Swen,它是如何完成的,但正如我所知,在所有情况下,我都会收到ErrorId标记,我决定使用此代码: 'XmlDocument doc = new XmlDocument(); doc.LoadXml(innerXml); string errorIdTags = doc.GetElementsByTagName(“ErrorId”)[0] .InnerText;' – foluis 2013-05-09 22:19:16
我仍然会建议您检查标签是否存在,尽量覆盖尽可能多的错误。 – 2013-05-10 13:27:41
当ErrorIdTags.Count == 1存在'ErrorIdTags [0]'时,'ErrorIdTags.Count 2017-03-17 09:02:46
第一次尝试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")
我不明白你真正想要的到底。你能给我们一个例子吗?你是什么意思,“我想要的是获得详细标签的价值”。你期待节点吗?节点列表?一个字符串?一串字符串?以及它们应该是什么? – 2013-05-08 23:31:04