2012-05-09 8 views
1

私はPowerShellを使用して、XMLドキュメント(.NETのSystem.Xml.XmlDocumentクラス)を操作しています。私はxml属性の間にカスタムの空白を追加したいと思います。 .NETでAPI呼び出しを見つけることができず、オンラインで誰もこれをやろうとしていないようです。ここで私は何をしようとしているの単純化した例はあるが、私は知らないコメントで何を呼び出すために:XML属性間にカスタム空白を追加する方法(.NET、Powershell)

$xmlDoc = [xml]@" 
<root> 
    <test Id="1" a="a" b="b" /> 
    <test Id="2" a="a" b="b" /> 
</root> 
"@ 
$elements = @($xmlDoc.SelectNodes('//*')) 
foreach($element in $elements) 
{ 
    $attributes = $element.Attributes 
    foreach($attribute in $attributes) 
    { 
     # 
     # How do I access the whitespace around the attributes? 
     # 
    } 
} 

# Output to screen exactly what will be saved to disk 
$tempFile = [System.IO.FileInfo]([System.IO.Path]::GetTempFileName()) 
$xmlDoc.save($tempFile) 
foreach($line in (Get-Content $tempFile)) 
    { Write-Host $line } 
Remove-Item $tempFile 

は、誰もがSystem.Xml.XmlAttributeの周りに空白をアクセスする方法を知っています?

+0

なぜ問題ではありません。 .NET APIがない場合は、それが答えになります。もしあなたがそれを確信したら、それを投稿してください。 – Vimes

+0

なぜか_実際の問題を他の方法で解決することは可能かもしれません。 XMLは属性の周りに空白を持っていません。 –

+0

XMLは本当に属性の周りに空白を持っています。属性間に空白がない*場合、有効なXMLではありません。 ''は空白がないため無効です。 – Vimes

答えて

3

残念ながら、XmlDocument(および関連する)またはXDocument(および関連するもの)を使用して行う方法はありません。 XmlTextWriterのような低レベルのものであっても、属性間に空白または改行を追加することはできません。

すべてのXmlNode/XObjectはシリアライズ可能であるため、独自の特殊フォーマットシリアル化を作成したり、結果のXMLを後処理することができます。これがうまくいくと思っています

関連する問題