2017-11-14 40 views
-1

PowerShellを使用して.CSVファイルを.XMLファイルに変換しようとしています。XmlNodeプロパティを設定するための値として文字列のみを使用できるため、「ExternalId」を設定できません。

[xml]$xml = " 
<Cv> 
<Owner> 
    <ExternalId></ExternalId> 
    <Name></Name> 
</Owner> 
<Content> 
    <Educations> 
    </Educations> 
</Content> 
</Cv>" 

$basePath= "C:\Users\test\source\CERTSUMMARY.CSV" 
$targetBase = "C:\Users\test\source\target" 

$sert = Import-CSV $basePath -Delimiter ';' 

foreach ($person in $sert) { 
    $xml2 = $xml.Clone() 
    $xml2.Cv.Owner.ExternalId = $person.Användarnamn 
    $xml2.Cv.Owner.Name = $person.Namn 

私は答えをここで見て、他の開発者が言ったことの提案を試してみた:

は、ここに私のコードです。 [string]$person.Användarnamnを入力しようとしましたが、$xml2.Cv.Owner.ExternalId.ToString()を試しましたが、CSVファイル内の値を変更しようとしましたが、結果はありませんでした。

トピックが言うように、エラーメッセージがある:「文字列だけがXmlNodeのプロパティを設定するための値として使用することができますので。 『

は外部ID』を設定できません」

答えて

0

ほとんどの場合、エンコードに問題があります。列タイトルには、ASCIIで定義されていない特殊文字(ä)が含まれています(Import-Csvのエンコードがデフォルトで使用されています)。Anv?ndarnamnと表示される可能性が最も高いです。$sert[0]をエコーし​​て確認できます。その場合、インポートされたオブジェクトにはプロパティーがありませんAnvändarnamn。 PowerShellは$nullステートメントに存在しないプロパティを展開しているので

$xml2.Cv.Owner.ExternalId = $person.Användarnamn 

は動作しないXMLノードに$nullを割り当てるしようとするだろう。

Defaultエンコーディングでファイルをインポートしてみてください。

$sert = Import-Csv $basePath -Delimiter ';' -Encoding Default 

それはあなたがおそらく特殊文字(たとえば、UTF8)をサポートする形式でCSVを保存する必要が解決しない場合。

+0

こんにちはAnsgar、 Iv'eは上記の提案をすべて試しても問題は残ります。 お返事ありがとうございます。 について、 – CatalystOne

+0

さらに詳しいヘルプについては、サンプル入力でご質問を更新してください。 –

+0

.CSVファイルと.PS1ファイルのその列とコードサンプルの一部のデータで更新されたIv'e。 "Användarnamn"を "Username"に変更しましたが、同じエラーメッセージが表示されます。 PSでエラーの画像を投稿してもよろしいですか? – CatalystOne

関連する問題