任何人都可以告诉我为什么,给出以下XDocument内容
<AddOrderResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ErrorMessage xmlns="http://schemas.datacontract.org/2004/07/appulsive.Intertek.LIMSService">, Fehler in der Belegerfassung Verkauf
Die Kontokorrentdaten konnten nicht gelesen werden.
(Exception of type 'Sagede.OfficeLine.Wawi.BelegEngine.RecordsetEmptyException' was thrown.)</ErrorMessage>
</AddOrderResult>
以及以下C#代码
var resultElement =xmlResponse.Element("AddOrderResult");
var errorMessage = resultElement.Element("ErrorMessage");
其中 xmlResponse 是有问题的XDocument对象, resultElement 是有效的XElement,但 errorMessage 始终为null?例如,它与ErrorMessage命名空间有关吗?
TIA。
答案 0 :(得分:3)
您错过了ErrorMessage的命名空间 - 它与根XMLNS不同,需要指定。此代码将正确地获取您的元素:
string rawXmlString = @"<AddOrderResult xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">
<ErrorMessage xmlns=""http://schemas.datacontract.org/2004/07/appulsive.Intertek.LIMSService"">, Fehler in der Belegerfassung Verkauf
Die Kontokorrentdaten konnten nicht gelesen werden.
(Exception of type 'Sagede.OfficeLine.Wawi.BelegEngine.RecordsetEmptyException' was thrown.)
</ErrorMessage>
</AddOrderResult>";
XDocument xmlResponse = XDocument.Parse(rawXmlString);
var resultElement =xmlResponse.Element("AddOrderResult");
XNamespace ns = "http://schemas.datacontract.org/2004/07/appulsive.Intertek.LIMSService";
var errorMessage = resultElement.Element(ns + "ErrorMessage");
你也可以在没有命名空间的情况下获得它,但它更笨拙......
var errorMessage_NoNS = resultElement.Elements().Where(x => x.Name.LocalName == "ErrorMessage").FirstOrDefault();