2016-03-03 64 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

相关问题