2016-08-23 6 views
1

XMLファイルでIDを検証しているときに、大文字と小文字が区別されます。私はそれを大文字小文字を区別しないようにするために "translate"を追加しました。ここで XML SelectSingleNode大文字小文字を区別する

id specified 'Test' not found in 'xmlfile' Aborting... 

は私のxmlファイルです:

<configuration> 

    <!--       TEST         --> 
    <environment id="TEST"> 
     <client>ABC</client> 
     <type>Test</type> 
     <filetype>ALL</filetype> 
     <enable>yes</enable> 
    </environment> 

</configuration> 

誰かがどのようにそれを作るために私に可能な解決策を提案してくださいすることができ

$Config = "xmlfile" 
[xml]$configxml = Get-Content $config 
$siteId = "Test" 
$Siteid = $Siteid.ToLower() 

$siteinfo = $configxml.SelectSingleNode("/configuration/environment[translate(@id='$($siteId)'])"); 

if(!$siteinfo) 
{ 
    Write-Host "id specified '$siteId' not found in '$config' Aborting..." 
    exit -1 
} 
else 
{ 
    Write-Host "site id is present" 
} 

私は次のエラーを取得しています:以下は、私のコードです大文字と小文字を区別しないで "translate"を使う方法は?

答えて

1

、あなたはまた、プロパティのようなノードを選択できます。

$config = "xmlfile" 
[xml]$configxml = Get-Content $config 
$siteId = "Test" 

$siteInfo = $configxml.configuration.environment | Where id -eq $siteId 

この意志も、大文字と小文字を区別しないマッチあなたのid ... XMLファイルに問題がある場合は

0

$ siteId変数にToLower()を使用するだけです。それで、私は通常、大文字と小文字を区別しないテキストを扱う方法です。すべてのテキストが一貫した形式になっていることを確認してください。 ToUpper()を使用してこれを実現することもできます。代わりに、XPATHの

+0

返信いただきありがとうございます。 $ siteIdに加えて、xml idも変換する必要があります。どうすればいいのか教えてくれますか? – mahesh

+0

投稿コードに質問は既に '$ Siteid = $ Siteid.ToLower()'がありますので、この答えは冗長であり、本当の解決策を提供しません。 – wOxxOm

+0

@wOxxOm:ありがとうございます。あなたが正しいです。私はコードを見て、それを逃した。 – breusshe

2

ToLower()これで十分ではありません)、このようにtranslate()を使用すると、XML値の大文字と小文字を入れ替えることができます。

translate(Value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') 

私は個人的にSystem.Xml.LinqにXMLハンドリングを移し始めました。さらに柔軟性。まだ高速ですが、いったん簡単になると簡単になります。

+0

IDが拡張ラテン文字またはその他のユニコードを使用している場合はどうなりますか? – wOxxOm

+0

手がかりではなく、決して見つけ出す必要はありません:) –

+0

これは修辞的な質問でした。つまり、このトリックはこれらのケースでは機能しません。 – wOxxOm

関連する問題