代码之家  ›  专栏  ›  技术社区  ›  Charles Morrison

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

  •  0
  • Charles Morrison  · 技术社区  · 11 年前

    如果我这样做:

    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 显示。我该怎么解决这个问题?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Ondrej Tucny    11 年前

    您需要这样创建它:

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

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

    还要注意的是 ShipmentReceiptNotification0Node.InnerText = String.Empty; 毫无用处;省略它是安全的,元素是空的 默认情况下 .