2017-02-01 6 views
2

こんにちはInsertAfterを使用することができません私は私の出力をしたいC#でのXmlDocumentについては、以下の

<?xml version="1.0" encoding="utf-16"?> 
<Verify> 
    <ver> 
    <ECU> 
     <values> 
     </values> 
    </ECU> 
    </ver> 
</Verify> 

以下のようにマスターXML

<?xml version="1.0" encoding="utf-16"?> 
<Verify> 
    <ver> 
    <ECU> 
     <values> 
     </values> 
    </ECU> 
    </ver> 
</Verify> 

あるXMLファイルは、私が同じ構造である複数のファイルを持っています

<?xml version="1.0" encoding="utf-16"?> 
<Verify> 
    <ver> 
    <ECU> 
     <values> 
     </values> 
    </ECU> 

    <ECU> 
     <values> 
     </values> 
    </ECU> 

    <ECU> 
     <values> 
     </values> 
    </ECU> 
    </ver> 
</Verify> 

ように私は、マスターXML あちこち他のファイルとして最初のものを読むためのコードの下に使用していますm xmlsフォルダ。マスターファイルのECUノードの下にこれらのファイルからECUノードを追加します。

XmlDocument xmlMaster = new XmlDocument(); 
     xmlMaster.Load(@"C:\MasterXMLFile.xml"); 
     XmlElement masterRoot = xmlMaster.DocumentElement; 
     XmlNode masterParent = masterRoot.LastChild.LastChild; 
     var downloadfolder = @"C:\AllXMLs\xmls\"; 
     string[] files = Directory.GetFiles(downloadfolder); 
     foreach (var xx in files) 
     { 
      XmlNode masterNode = masterRoot.LastChild.LastChild; 
      XmlDocument xdoc = new XmlDocument(); 
      xdoc.Load(xx); 
      XmlElement root = xdoc.DocumentElement; 
      XmlElement tempNode = (XmlElement)root.LastChild.LastChild; 
      masterRoot.InsertAfter(tempNode, masterRoot.SelectSingleNode("//ECU").ParentNode); 
     } 
     xmlMaster.Save(@"C:\mergeg.xml"); 

オブジェクト参照がオブジェクトのインスタンスに設定されていないため、InsertAfterステートメントでエラーが発生します。

私には何か解決策を提案してください。

+1

要素ノードを選択するために 'LastChild'が期待されません。テキストノードにすることができます。ですから、XPathと 'SelectSingleNode'でコピーしたい要素を選択するだけです。そしてある文書から別の文書にノードをコピーする場合は、必ず 'ImportNode'を使用してください。 –

答えて

2

tempNodexdoc文書のコンテキストです。あなたはxmlMaster文書のコンテキストにインポートする必要があります

XmlNode importedECU = xmlMaster.ImportNode(tempNode, true); 

また代わりのInsertAfterAppendChildを使用して、マスターver要素の子として新しいECUノードを追加すると良いでしょう:

var masterVer = masterRoot.SelectSingleNode("//ver"); 

foreach(var file in files) 
{ 
    var xdoc = new XmlDocument(); 
    xdoc.Load(file); 
    var tempNode = xdoc.DocumentElement.LastChild.LastChild; 
    var importedECU = xmlMaster.ImportNode(tempNode, true); 
    masterVer.AppendChild(importedECU); 
} 
0

あなたInsertAfterが上にある必要があります後に挿入するノードのparentNodeです。したがって、tempNodeの親ノードです。

関連する問題