基于多部分XML根声明创建具有名称空间前缀的元素

本文关键字:空间 有名称 前缀 元素 创建 于多部 XML 声明 | 更新日期: 2023-09-27 18:03:06

如果我这样做:

System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
XmlElement e = xmlDoc.CreateElement("ShipmentReceiptNotification");
e.SetAttribute("xmlns", "urn:rosettanet:specification:interchange:ShipmentReceiptNotification:xsd:schema:02.02");
e.SetAttribute("xmlns:ssdh", "urn:rosettanet:specification:domain:Procurement:AccountClassification:xsd:codelist:01.03");
XmlNode ShipmentReceiptNotification0Node = e;
ShipmentReceiptNotification0Node.InnerText = String.Empty;
xmlDoc.AppendChild(ShipmentReceiptNotification0Node);
XmlNode DocumentHeader1Node = xmlDoc.CreateElement("ssdh:DocumentHeader");
ShipmentReceiptNotification0Node.AppendChild(DocumentHeader1Node);

将导致第二个节点的前缀ssdh不显示,只显示DocumentHeader。我怎样才能解决这个问题?

基于多部分XML根声明创建具有名称空间前缀的元素

您需要像这样创建它:

XmlNode DocumentHeader1Node = xmlDoc.CreateElement("ssdh", "DocumentHeader", "urn:rosettanet:specification:domain:Procurement:AccountClassification:xsd:codelist:01.03");

关键是XmlDocument需要知道哪个命名空间前缀(第一个参数)对应哪个命名空间URI(第三个参数)。有点违反直觉,但这就是它的工作方式。

还要注意ShipmentReceiptNotification0Node.InnerText = String.Empty;行是无用的;省略它是安全的,元素默认为空