【问题标题】:PowerShell XML Nodes from Another File来自另一个文件的 PowerShell XML 节点
【发布时间】:2016-03-03 04:44:10
【问题描述】:

我正在运行我的 PowerShell 脚本,基本上是从几个较小的 XML 文件创建一个大的 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>

我要做的就是从给定文件夹中的每个 XML 文件中复制节点 &lt;Entity&gt;,并使用模板和信息创建一个新的 MASTER.XML,并从文件夹中的每个 .xml 中提取 &lt;ENTITY&gt;,结果这个:

<?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() 的错误消息

有什么建议吗???

【问题讨论】:

  • 我建议:定义不起作用...,在您的帖子中包含错误消息。
  • 您不能在空值表达式上调用方法。在 Parser.ps1:17 char:5 + $master.Model.LobSystems.LobSystem.Entities.Entity.AppendChild($importedEnti ... + ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

标签: xml powershell nodes


【解决方案1】:

看来您需要先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);

}

【讨论】:

  • 太棒了!!!!让我做对了,但我必须删除一个小错误,而不是 Entities.Entity。只需删除 .Entity ,一切正常!
  • 当然,AppendChild() 应该在 Entity 的父级上调用。感谢您的确认和更正,答案已相应更新。
猜你喜欢
  • 2018-04-11
  • 2014-12-22
  • 2012-08-16
  • 1970-01-01
  • 2022-11-16
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多