我有这个字符串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>
我想要的是获取详细信息Tag的值,我正在尝试使用此示例,但所有返回null o cero count,你能帮助我吗?
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");
}
答案 0 :(得分:9)
我认为这可能是您的解决方案:
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;
}
答案 1 :(得分:1)
尝试使用Linq to Xml(http://msdn.microsoft.com/en-us/library/bb387098%28v=VS.100%29.aspx) - 代码非常优雅。
答案 2 :(得分:0)
第一次尝试XmlNode node = (XmlNode)doc.DocumentElement;
应该有用,应该包含子项。试试XmlNode firstChildNode = node.FirstChild;
...这会让你成为第一个孩子,并且不会为空/ null。
但是当使用xpath时,由于定义的命名空间,您将遇到问题。您必须在doc中创建一个新的命名空间,并指定 http://schemas.datacontract.org/2004/07/CIEL.DigiturnoMega.Entidades
一个简写(例如 sh
)...然后在您的xpath你可以去doc.SelectSingleNode(@"/detail/sh:WCFFaultExcepcion/sh:ErrorId")