Powershell:搜索多个字符串多个xml并将结果输出到csv

时间:2013-06-28 09:52:21

标签: xml string powershell

我需要帮助来搜索多个字符串的多个xml文件,然后将结果输出到csv或txt文件中。 xml文件都采用相同的格式。

目前我只能使用以下内容从单个xml中提取单个字符串:

$xml = [xml](Get-Content 'C:\App\test.xml')
$xml.application.stage1.c_firstname

返回名称,我需要能够返回c_surnamec_userid并将其输出到多个xml上的csv文件(理想情况下或文本中)

示例XML文件:

<?xml version="1.0" encoding="UTF-8" ?>
<application>
  <stage1>
    <c_product_name>Test</c_product_name>
    <c_firstname>Bill</c_firstname>
    <c_surname>Gates</c_surname>
  </stage1>
  <stage5>
    <c_number>12345TEST</c_number>
  </stage5>
</application>

2 个答案:

答案 0 :(得分:0)

我不确定我的问题是否正确但是: 如果您有XML输入,例如:

<persons>
<person>
<firstname>Mickey</firstname>
<lastname>Mouse</lastname>
</person>
<person>
<firstname>Donald</firstname>
<lastname>Duck</lastname>
</person>
</persons>

保存在d:\ temp \ Input.xml

然后是命令

$xml = [xml](get-Content d:\temp\input.xml)
$csv = $xml.persons.person | Convertto-CSV -NoTypeInformation

应该做的伎俩。

答案 1 :(得分:0)

我将循环加载XML文件并使用XPath表达式从相关节点中提取文本。像这样的事情:

Get-ChildItem "C:\path\to\*.xml" `
  | % { Get-Content $_ | Out-String } `
  | select @{n="c_firstname";e={$_ | Select-Xml "//c_firstname/text()"}},
           @{n="c_userid";e={$_ | Select-Xml "//c_userid"}} `
  | Export-Csv "C:\output.csv" -NoTypeInformation