1

私はLINQに非常に慣れていないので、ご容赦ください:)

現在、XML 形式の SSIS パッケージ (.dtsx) を XML ベースの .BIML ファイルにリバース エンジニアリングしようとしています。ただし、同じオブジェクトに対して異なる構造を持っています。

だから私がやろうとしているのは、.dtsxパッケージのXMLをループして、基本的に要素のタイプをチェックし、新しいファイルに同等の要素を作成することですが、名前/属性が異なりますが、必要になります新しいファイルに要素を作成するときに、オブジェクトの階層関係を維持します。

しかし、ソースファイルをループしているときに、新しいファイルに新しい要素を追加する方法に本当に苦労しています。

誰かがいくつかの指針を提供できますか?

現時点ではファイルをループできます (正しくループしているかどうかを確認するために、コンソール ウィンドウに出力しているだけです) が、要素を新しいファイルに追加するのに苦労しています。

どんな助けでも大歓迎です

    string file  = @"F:\\sample.dtsx"
    XDocument xDoc = XDocument.Load(file);
    XNamespace env = "www.microsoft.com/SqlServer/Dts";

    IEnumerable<XElement> elements = xDoc.Root.Descendants(); //

    XDocument BIMLXdoc = new XDocument(
                        new XDeclaration("1.0", "utf-8", null),
                        new XElement("Root"));
                        //BIMLXdoc.Add(new XElement("test"));  ####This doesn't work

    foreach (XElement element in elements)
            {
             // Test element and if of the correct type add new elemnt to biml file 

             IEnumerable<XAttribute> attribs = element.Attributes();

                   foreach (XAttribute attrib in attribs)
                        {
                            Console.WriteLine(element.Name.LocalName  + " - Attribute(" + attrib.Name.LocalName + ") - Value:(" + attrib.Value + ")");
                        }
             }          
     BIMLXdoc.Save("F:\\BIMLTest.xml");
4

2 に答える 2

0

コメント行では、ノードを最上位に追加しようとしています。正しい XML ドキュメントにはルート要素が 1 つしかありません。したがって、ノードをRoot要素に追加します。

    var BIMLXdoc = new XDocument(
            new XDeclaration("1.0", "utf-8", null),
            new XElement("Root"));
    BIMLXdoc.Root.Add(new XElement("test"));  // This works
于 2013-10-18T23:25:26.133 に答える
0

Xdoc に新しい要素を追加する場合は、特定の場所に追加する必要があります。

変化する:

BIMLXdoc.Add(new XElement("test"));

に:

BIMLXdoc.Element("Root").Add(new XElement("TestChild", "TestChildValue"));

そして、子要素があります。

于 2013-10-18T23:25:38.700 に答える