2014-03-28 2 views
0

XML 파일을 읽는 프로그램이 있습니다. 이 XML 파일에는 활성화되지 않은 일부 언어 코드를 나열하는 항목이 있습니다. 파일 경로 및 각 로캘에 대한 속성을 가진 개체를 만들었습니다. 내 스크립트가 각 XML 파일을 통과하도록하고 올바른 로케일 아래에 X를 배치하도록 로켈이 나열되지 않은 경우. 이것은 내가 지금까지 무엇을 가지고 :powershell에서 하나씩 객체 속성 가져 오기

Get-ChildItem C:\Users\rasuser\Desktop\ *.xml -recurse | 
% { 

    $contentItem = [xml](Get-Content $_.fullname) 
    $contentItem = $contentItem.ExportedContentItem 
    #$contentItem 


    $resultRow = New-Object -Type PSObject -Property @{ 
     'FilePath' = Join-Path $contentItem.path $contentItem.name 
     'InvariantCulture' = '' 
     'ar-ae' = '' 
     'ar-sa' = '' 
     'cs-cz' = '' 
     'da-dk' = '' 
     'de-at' = '' 
     'de-ch' = '' 
     'de-DE' = '' 
     'el-gr' = '' 
     'en-au' = '' 
     'en-ca' = '' 
     'en-gb' = '' 
     'en-hk' = '' 
     'en-ie' = '' 
     'en-in' = '' 
     'en-nz' = '' 
     'en-sg' = '' 
     'en-us' = '' 
     'en-za' = '' 
     'es-ar' = '' 
     'es-cl' = '' 
     'es-co' = '' 
     'es-es' = '' 
     'es-mx' = '' 
     'fi-fi' = '' 
     'fr-be' = '' 
     'fr-ca' = '' 
     'fr-ch' = '' 
     'fr-fr' = '' 
     'he-il' = '' 
     'hu-hu' = '' 
     'it-it' = '' 
     'ja-jp' = '' 
     'ko-kr' = '' 
     'nb-no' = '' 
     'nl-be' = '' 
     'nl-nl' = '' 
     'pl-pl' = '' 
     'pt-br' = '' 
     'pt-pt' = '' 
     'ru-ru' = '' 
     'sk-sk' = '' 
     'sv-se' = '' 
     'tr-tr' = '' 
     'zh-hk' = '' 
     'zh-tw' = '' 
    }  

    Join-Path $contentItem.path $contentItem.name 

    $contentItem.ContentItem.PresentationData.DisabledLocales.locale | % { 
     #$_ 
     #write-host "ha" 

     if ($_){ 
      #Write-Host $resultRow."$($_)" 
     } 
    } 

    #$resultRow 
} #| Export-Csv '.\text.txt' -NoType -Delimiter "`t" 

내가 개체 속성 이름, 각각의 이름을 통해 다음 루프를 얻기 위해 노력하고는 XML의 disableLocales 섹션에 나열된 로케일과 일치하는 경우 다음 X를 삽입 그러나 나는 그걸 멀리하기 위해 정말로 고심하고있다. 어떤 도움을 크게 감상 할 수

<PresentationData> 
    <DisabledLocales> 
    <Locale>ar-AE</Locale> 
    <Locale>ar-SA</Locale> 
    <Locale>cs-CZ</Locale> 
    <Locale>da-DK</Locale> 
    <Locale>de-AT</Locale> 
    <Locale>de-CH</Locale> 
    <Locale>el-GR</Locale> 
    <Locale>en-AE</Locale> 
    <Locale>en-AU</Locale> 
    <Locale>en-CA</Locale> 
    <Locale>en-GB</Locale> 
    <Locale>en-HK</Locale> 
    <Locale>en-IE</Locale> 
    <Locale>en-IN</Locale> 
    <Locale>en-NZ</Locale> 
    <Locale>en-SG</Locale> 
    <Locale>en-ZA</Locale> 
    <Locale>es-AR</Locale> 
    <Locale>es-CL</Locale> 
    <Locale>es-CO</Locale> 
    <Locale>es-ES</Locale> 
    <Locale>es-MX</Locale> 
    <Locale>fi-FI</Locale> 
    <Locale>fr-BE</Locale> 
    <Locale>fr-CA</Locale> 
    <Locale>fr-CH</Locale> 
    <Locale>fr-FR</Locale> 
    <Locale>he-IL</Locale> 
    <Locale>hu-HU</Locale> 
    <Locale>it-IT</Locale> 
    <Locale>ja-JP</Locale> 
    <Locale>ko-KR</Locale> 
    <Locale>nb-NO</Locale> 
    <Locale>nl-BE</Locale> 
    <Locale>nl-NL</Locale> 
    <Locale>pl-PL</Locale> 
    <Locale>pt-BR</Locale> 
    <Locale>pt-PT</Locale> 
    <Locale>ru-RU</Locale> 
    <Locale>sk-SK</Locale> 
    <Locale>sv-SE</Locale> 
    <Locale>tr-TR</Locale> 
    <Locale>zh-HK</Locale> 
    <Locale>zh-TW</Locale> 
    <Locale>en-US</Locale> 
    </DisabledLocales> 
</PresentationData> 

:

내가 찾고 있어요 XML 파일의 일부이다.

답변

1

나는 'X'를 원하지만 어쩌면 이것이 도움이 될지 모르겠다.

$hereStr = @" 
'ar-ae' = '' 
'ar-sa' = '' 
'cs-cz' = '' 
'da-dk' = '' 
'de-at' = '' 
'de-ch' = '' 
'de-DE' = '' 
'el-gr' = '' 
'en-au' = '' 
'en-ca' = '' 
'en-gb' = '' 
'en-hk' = '' 
'en-ie' = '' 
'en-in' = '' 
'en-nz' = '' 
'en-sg' = '' 
'en-us' = '' 
'en-za' = '' 
'es-ar' = '' 
'es-cl' = '' 
'es-co' = '' 
'es-es' = '' 
'es-mx' = '' 
'fi-fi' = '' 
'fr-be' = '' 
'fr-ca' = '' 
'fr-ch' = '' 
'fr-fr' = '' 
'he-il' = '' 
'hu-hu' = '' 
'it-it' = '' 
'ja-jp' = '' 
'ko-kr' = '' 
'nb-no' = '' 
'nl-be' = '' 
'nl-nl' = '' 
'pl-pl' = '' 
'pt-br' = '' 
'pt-pt' = '' 
'ru-ru' = '' 
'sk-sk' = '' 
'sv-se' = '' 
'tr-tr' = '' 
'zh-hk' = '' 
'zh-tw' = '' 
"@ 

$array = $hereStr.Split("`n").Trim() 

$file = gci file.xml 
$contentItem = [xml](Get-Content $file.fullname) 
$disabledLocales = $contentItem.PresentationData.DisabledLocales.Locale 
$outs = @() 
foreach ($item in $array) { 
    $lang = $item[1..5] -join "" 
    if ($disabledLocales -contains $lang) {$out = $item -replace "''","'X'"} 
     else {$out = $item} 
    $outs += $out 
} #close foreach item 
$outs