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

この回答を見たことがありますか: https://stackoverflow.com/a/2255337/219344 by Jeff Sternal ?

ルート ノードで名前空間を既に宣言している場合は、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");

名前空間 (およびそのプレフィックス) をまだ宣言していない場合は、3 つの文字列の 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 に答える