1

私のpowershellコードは実際にXMLからデータを読み取り、特定のデータをcsvファイルに保存します。XML ファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<Report Version="10.0">
<Targets>
<Target Name="\\bin\testBusiness.dll">
<Modules>
<Module Name="testing.dll" AssemblyVersion="1.0.1003.312" FileVersion="1.0.0.0">
<Metrics>
<Metric Name="Maintainability" Value="78" />
</Metrics>
</Module>
</Modules>
</Target>
</Targets>
</Report>

上記の XML コードから「testing.dll」のみを抽出する必要があります。そのために使用しているコードは次のとおりです。

$testDLL = [regex]::matches($xmlfile[5], '<mod name=".*" ')[0].value -replace '<mod name="(.*)" ','$1'
#the above code line gets even the AssemblyVersion 
$testAssembver =  [regex]::matches($xmlfile[5], 'AssemblyVersion=".*" ')[0].value -replace 'AssemblyVersion=".*" ','$1'  

XML コードから「testing.dll (xml 内の mod 名)」に AssemblyVersion を連結する必要はありません。

現在、私は次のようなものを取得します:

 testing.dll" AssemblyVersion=1.0.1000.112" 

私はtesting.dllだけが必要です。それ以降はすべて省略してください。

助けてください。

ありがとう、アシッシュ

4

2 に答える 2

3

正規表現が XML を解析する最良の方法だとは思いません。おそらく、XMLDocument を使用したほうがよいでしょう。

より優れた XML ドキュメントを使用する:

<Dumy>
<Report Version="10.0"></Report>
<Goals>
  <Name>"\\somepath\path.dll"</Name>
  <Mods>
    <Mod Name="testing.dll" AssemblyVersion="1.0.1000.112" FileVersion="1.0.0.1"></Mod>
  </Mods>
</Goals>
</Dumy>

次のようにデータを見つけることができます:

$data = [XML](Get-Content "C:\temp\test.xml")
$data.Dumy.Goals.Mods.Mod.Name
于 2012-10-09T11:47:31.007 に答える
0

JPBlanc によって正しく提案されている XML を使用します。次に、XPath を使用します。例、必要な値を抽出するには:

$data.selectnodes("//Modules/Module/@Name")
于 2012-10-10T09:55:25.800 に答える