0

我有一些 xml 集,我必须在没有任何前缀的节点上添加命名空间前缀。

我编写了一个适用于除根元素以外的所有节点的代码。

请指出我也可以更改根元素前缀的事情。

 private void ReplaceFile(string xmlfile)
 {
     XmlDocument doc = new XmlDocument();
     doc.Load(xmlfile);
     var a = doc.CreateAttribute("xmlns:mailxml12tm");
     a.Value = "http://idealliance.org/Specs/mailxml12.0a/mailxml_tm";
     doc.DocumentElement.Attributes.Append(a);
     doc.DocumentElement.Prefix = "mailxml12tm";
     //foreach (XmlNode item in doc.SelectNodes("//*").Cast<XmlNode>().Where(item => item.Prefix.Length == 0))
     //{
     //    item.Prefix = "mailxml12tm";
     //}
     doc.Save(xmlfile);
}

xml文件:

<DeliveryApptCreateRequest 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    p3:ApptType="Pallet" p3:PickupOrDelivery="Delivery" 
    p3:ShipperApptRequestID="4490B0C07355" p3:SchedulerCRID="6498874" 
    xmlns:p3="http://idealliance.org/Specs/mailxml12.0a/mailxml_defs">
    <SubmitterTrackingID xmlns="http://idealliance.org/Specs/mailxml12.0a/mailxml_tm">2CAD3FBC71B1E1517021</SubmitterTrackingID>
    <DestinationEntry xmlns="http://idealliance.org/Specs/mailxml12.0a/mailxml_tm">No</DestinationEntry>
    <OneTimeAppt xmlns="http://idealliance.org/Specs/mailxml12.0a/mailxml_tm">
        <PreferredAppt>2012-07-01T09:00:00Z</PreferredAppt>
    </OneTimeAppt> 
</DeliveryApptCreateRequest>
4

2 回答 2

0

您是否看过这个答案:Jeff Sternalhttps://stackoverflow.com/a/2255337/219344

如果您已经在根节点中声明了命名空间,则只需更改 SetAttribute 调用以使用不带前缀的属性名称。因此,如果您的根节点定义了这样的命名空间:

<People xmlns:s='http://niem.gov/niem/structures/2.0'>

您可以这样做,该属性将获取您已经建立的前缀:

// no prefix on the first argument - it will be rendered as // s:id='ID_Person_01' TempElement.SetAttribute("id", "http://niem.gov/niem/structures/2.0", "ID_Person_01");

如果您尚未声明命名空间(及其前缀),则三字符串 XmlDocument.CreateAttribute 重载将为您完成:

// Adds the declaration to your root node var attribute = xmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); attribute.InnerText = "ID_Person_01" TempElement.SetAttributeNode(attribute);

于 2012-06-20T15:14:52.443 回答
0

您可以使用以下内容:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<test xmlns='123'/>");
XmlElement e = doc.DocumentElement;       
e.Prefix = "a";
Console.WriteLine(doc.InnerXml);

输出:

<a:test xmlns="123" xmlns:a="123" />

创立于msdn

编辑:

由于它不适用于您的主要元素,您可以.Replace("<", "<Prefixe:"));在根元素上使用String. 它不漂亮,但它可以完成工作。

于 2012-06-20T15:16:40.463 回答