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。

XML难题——为什么使用null元素

您缺少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();