2017-12-01 5 views
0

XmlDocumentの名前空間をC#で以下のように変更するにはどうすればよいですか?私はstring.Replaceでinnerxmlを変更することができます。しかし、それを行うためのより良い方法があります。C#のXmlDOcumentの名前空間を変更する

<Result xmlns:Result="MyProject.Result"> 
    <Result:Errors> 
     <Result:Error> 
      <Result:Severity>0</Result:Severity> 
      <Result:Reason>The input was wrong</Result:Reason> 
     </Result:Error> 
    </Result:Errors> 
</Result> 
<Result xmlns:Result="Project.User.Result"> 
    <Result:Errors> 
     <Result:Error> 
      <Result:Severity>0</Result:Severity> 
      <Result:Reason>The input was wrong</Result:Reason> 
     </Result:Error> 
    </Result:Errors> 
</Result> 

答えて

0

あなたはこれを許可XmlSerializer-Overloadsを使用してXMLを書き換えることで、名前空間を変更することができます。

public class Location { public string L; } 
public class MyData { public Location[] Locations { get; set; } } 

internal class Program 
{ 
    static void Main() 
    { 
    // testdata 
    var m = new MyData { Locations = new Location[2] { new Location { L = "L1" }, new Location { L = "L2" } } }; 

    // simple Serializer 
    var xs = new XmlSerializer (typeof (MyData)); 

    DoSerialize (m, xs); 
    Console.WriteLine(); 

    var xs2 = new XmlSerializer (typeof (MyData), new XmlAttributeOverrides(), new Type[] { }, new XmlRootAttribute { Namespace = "MyNewNamspace" }, ""); 

    DoSerialize (m, xs2); 
    Console.ReadLine(); 
    } 


    static void DoSerialize (MyData m, XmlSerializer xs) 
    { 
    var settings = new XmlWriterSettings 
    { 
     OmitXmlDeclaration = true, 
     Indent = true, 
     NewLineOnAttributes = true 
    }; 

    var sww = new System.IO.StringWriter(); 
    var writer = XmlWriter.Create (sww, settings); 
    xs.Serialize (writer, m); 
    Console.WriteLine (sww.ToString().Replace ("><", ">\r\n<")); 
    } 
} 
+0

これは、xmlと一致するクラスを作成する必要があることを意味します。 – Ramki

+0

@Ramkiはい。クラス構造を用意していない場合は、これらの[answers](https://stackoverflow.com/questions/11103615/how-to-change-xml-namespace-of-certain-element)がおそらくより適しています –

関連する問題