2016-03-03 74 views
2

我正在運行我的PowerShell腳本以基本上從幾個較小的XML文件創建一個大的XML文件。來自其他文件的PowerShell XML節點

腳本打開Template.txt:

<?xml version="1.0" encoding="utf-8"?> 
<Model> 
    <LobSystems> 
    <LobSystem> 
     <LobSystemInstances> 
     </LobSystemInstances> 
     <Entities> 
     <!-- individual <ENTITY> from every XML file goes here --> 
     </Entities>  
    </LobSystem> 
    </LobSystems> 
</Model> 

所有我想要做的是節點<Entity>從每個XML文件複製在一個給定的文件夾,並使用模板和信息創建一個新的MASTER.XML和從文件夾中的每一個.XML提取<ENTITY>,造成這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<Model> 
    <LobSystems> 
    <LobSystem> 
     <LobSystemInstances> 
     </LobSystemInstances> 
     <Entities> 

      <Entity Name="A">  // from File1.XML 
      <Value>XYZ</Value> 
      </Entity> 

      <Entity Name="B">  // from File4.XML 
      <Value>123</Value> 
      </Entity> 

      <Entity Name="C">  // from File3.XML 
      <Value>@#$</Value> 
      </Entity> 

     </Entities>  
    </LobSystem> 
    </LobSystems> 
</Model> 

到目前爲止,我的腳本如下:

[xml]$master = get-content .\Template.txt 
$files = get-item -Path .\*.xml -Exclude 'Master.xml' 

foreach ($file in $files) 
{ 
    [xml]$filecontents = get-content $file 

    $entity = $fileContents.Model.LobSystems.LobSystem.Entities.Entity 

    $master.Model.LobSystems.LobSystem.Entities.Entity.AppendChild($entity); 

} 
$master.Save("Master.xml") 

那麼它不工作....我不斷收到有關AppendChild()的錯誤消息()

任何建議?

+2

我建議:定義*不工作... *,包括在您的文章的錯誤消息。 – PetSerAl

+0

您無法在空值表達式上調用方法。 At Parser.ps1:17 char:5 + $ master.Model.LobSystems.LobSystem.Entities.Entity.AppendChild($ importedEnti ... + ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull –

回答

2

看來你需要先import元素,因爲它來自另一個XML文檔實例,像這樣:

foreach ($file in $files) 
{ 
    [xml]$filecontents = get-content $file 

    $entity = $fileContents.Model.LobSystems.LobSystem.Entities.Entity 

    $importedEntity = $master.ImportNode($entity, $TRUE) 

    $master.Model.LobSystems.LobSystem.Entities.AppendChild($importedEntity); 

} 
+0

Wondeful !!!!給了我正確的工作,但我不得不刪除一個小錯誤, –

+0

當然,'AppendChild()'應該在'Entity'的父節點上被調用過,感謝您的確認和更正,答案已經相應更新了。 – har07

相關問題