XML难题——为什么使用null元素
本文关键字:null 元素 为什么 难题 XML | 更新日期: 2023-09-27 17:51:01
有谁能告诉我为什么,因为下面的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总是空的?例如,它是否与ErrorMessage名称空间有关?
TIA。
您缺少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();