【问题标题】:Loop through XML files powershell循环遍历 XML 文件 powershell
【发布时间】:2013-10-24 20:24:59
【问题描述】:

我正在尝试从 XML 文件中提取一些内容。我有我需要为一个文件工作的东西,但我需要为一个目录中的所有文件做这件事。到目前为止,我所拥有的是:

$files = Get-ChildItem C:\Users\rasuser\Desktop\import *.xml -recurse

foreach ($file in $files){

$MyXml = [xml](Get-Content $file)

#$path = $file.ExportedContentItem.path
#$name = $file.ExportedContentItem.name
#$GUID = $file.ExportedContentItem.ID

#$path + "/" + $name + " > "+$GUID

}

我不太了解如何将读取的内容导入 XML 格式。谁能帮帮我?

【问题讨论】:

  • How to read XML in Powershell? 的可能重复项
  • 您说您的代码适用于一个文件,但您没有说明当您将其应用于循环中的多个文件时它会以何种方式停止工作。
  • 对不起,我应该说我在使用 Get-Content 而不是 Get-ChildItem 的单个文件上使用 XML 时正确导航 XML。当我尝试循环上面的代码时,我无法将 XML 内容读入 $myXml

标签: xml loops powershell


【解决方案1】:

如果您的 XML 看起来像这样 <doc><foo name='fooname'><bar>bar content</bar></foo></doc>,您可以像这样访问内容:

$MyXml = [xml](Get-Content $xmlFile)
$MyXml.doc.foo.name
$MyXml.doc.foo.bar

【讨论】:

  • 另外,您可能希望将“$MyXml”显式声明为 XML,例如:[xml]$MyXml = Get-Content $xmlFile
  • 是的,这会有所帮助。 :-)
【解决方案2】:

尝试以下方法:

function list-xml-files() {
    get-childitem -recurse -force | ? { -not $_.psisdirectory } | ? { $_.name.endswith('.xml') } 
}

function list-data([xml]$xml) {
    $path = $xml.ExportedContentItem.path
    $name = $xml.ExportedContentItem.name
    $ID = $xml.ExportedContentItem.ID
    [string]::Format("{0}/{1} > {2}", $path, $name, $ID)
}

list-xml-files | % { [xml](get-content $_) } | ? { $_.ExportedContentItem } | % { list-data $_ }

此代码遵循更实用的编程风格。 '%' 是 map,'?'是filter

它展示了 PowerShell 的几个不错的功能。您可能想要install PowerShell 3.0(您还需要 .NET 4.0),您将能够通过 IntelliSense 探索各种 PowerShell 功能。

【讨论】:

    【解决方案3】:

    我在尝试读取单个 xml 文件路径时遇到错误。我通过使用 $_.fullname 解决了它:

    Get-ChildItem C:\Users\rasuser\Desktop\import *.xml -recurse | 
    % { 
        $file = [xml](Get-Content $_.fullname)
    
        $path = $file.ExportedContentItem.path
        $name = $file.ExportedContentItem.name
        $GUID = $file.ExportedContentItem.ID
    
        $out = $path + "/" + $name + "`t" + $GUID
    
        $out
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      相关资源
      最近更新 更多