2017-12-07 6 views
0

目的:属性内の特定の値を持つ要素を識別し、識別された値の値をユーザー入力に追加します。PowerShellに値を追加する

複数のリソース要素を持つXMLファイルがありますが、その中にはXML値があり、そうでないものもあります。以下は例です。

<resources> 
    <resource identifier="i149" href="items/i149/qti.xml"> 
    <file href="items/i149/qti.xml" /> 
    </resource> 
</resources> 

私が特定したものを追加する方法については固まっています。現在SelectNodes()を使用して、iを含む識別子の値には$userInputを追加する必要があります。

が代わりに SelectNodes()

Cannot convert argument "0", with value: "_01a", for "AppendChild" to type "System.Xml.XmlNode": "Cannot convert the "_01a" value of type "System.String" to type "System.Xml.XmlNode"."

、私は文字列としてXMLを取得する必要があります:私はそれを実行すると、しかし、私はこのエラーを取得しますか?以下はコードです。あなたは何をしている(別のXMLノードに属性値に文字列ではなく、XMLノードを追加したい

<resources> 
    <resource identifier="i149_XX" href="items/i149/qti_XX.xml"> 
    <file href="items/i149/qti_XX.xml" /> 
    </resource> 
</resources> 

答えて

0

#user prompt 
$userInput = Read-Host -Prompt 'Insert 2 alpha-numeric' 

#ims 
$imsnodes = [xml](Get-Content $ims.FullName) 
$identifier = $imsnodes.SelectNodes("//*[contains(@identifier,'i')]") 
$identifier.AppendChild("_$userInput") 
$imsnodes.Save($_.FullName) 

私が持っているしたい結果は、以下の場所XX = $userInputですAppendChild()メソッド)。

変更この:この中

$identifier = $imsnodes.SelectNodes("//*[contains(@identifier,'i')]") 
$identifier.AppendChild("_$userInput") 

$imsnodes.SelectNodes("//*[contains(@identifier,'i')]") | ForEach-Object { 
    $_.identifier += "_$userInput" 
} 

、問題が消えます。

+0

ありがとうございました!もう一つの疑問は、ファイル名を編集するのにどのメソッドが機能するのかということです。 ''は 'qti.xml_XX'になります。 '$ qti.Value =" new value "'を使ってみましたが、qitにユーザー入力を追加するのではなく、属性の値全体を置き換えます。 – parsnup

+0

'$ foo + = 'bar''は' $ foo = $ foo +' bar''の文法的な砂糖です。あなたはいつでも '$ var = $ var some_value'を使うことができます。 '$ _。識別子= $ _。識別子 - 「何か」、「他のもの」を置き換えます。 –

関連する問題