我有一个散列/数组结构,我想用它来组合几个文本文件。这是实现这一目标的最好方法吗?
$resolutions = @(
@{"bitrate" = 1100; "width" = 1920; "height" = 1080};
@{"bitrate" = 800; "width" = 800; "height" = 448};
@{"bitrate" = 400; "width" = 800; "height" = 448};
@{"bitrate" = 128; "width" = 800; "height" = 448};
@{"bitrate" = 64; "width" = 800; "height" = 448}
)
$metadata =
@"
<xml>
<targets>`r`n
"@
foreach ($resolution in $resolutions)
{
$metadata += " <target>`r`n"
$metadata += " <bitrate>$($resolution["bitrate"])</bitrate>`r`n"
$metadata += " <width>$($resolution["width"])</width>`r`n"
$metadata += " <height>$($resolution["height"])</height>`r`n"
$metadata += " </target>`r`n"
}
$metadata +=
@"
</targets>
</xml>
"@
$metadata | out-file Metadata.xml -encoding ASCIIMetadata.xml的内容应该如下所示:
<xml>
<targets>
<target>
<bitrate>1100</bitrate>
<width>1920</width>
<height>1080</height>
</target>
<target>
<bitrate>800</bitrate>
<width>800</width>
<height>448</height>
</target>
<target>
<bitrate>400</bitrate>
<width>800</width>
<height>448</height>
</target>
<target>
<bitrate>128</bitrate>
<width>800</width>
<height>448</height>
</target>
<target>
<bitrate>64</bitrate>
<width>800</width>
<height>448</height>
</target>
</targets>
</xml>发布于 2013-06-12 04:16:24
我会使用一个单独的here-string:
$metadata = @"
<xml>
<targets>
$(
foreach ($resolution in $resolutions)
{
"<target>"
"<bitrate>$($resolution.bitrate)</bitrate>"
"<width>$($resolution.width)</width>"
"<height>$($resolution.height)</height>"
"</target>"
}
)
</targets>
</xml>
"@
$metadata | out-file Metadata.xml -encoding ASCII发布于 2013-06-12 04:16:38
去罗马的路有很多种。就我个人而言,我喜欢使用现有的工具。您已经获得了可用的.Net框架,因此您可以通过多种方式来完成此任务。例如。您可以使用XmlDocument尝试这种方法。
$resolutions = @(
@{"bitrate" = 1100; "width" = 1920; "height" = 1080};
@{"bitrate" = 800; "width" = 800; "height" = 448};
@{"bitrate" = 400; "width" = 800; "height" = 448};
@{"bitrate" = 128; "width" = 800; "height" = 448};
@{"bitrate" = 64; "width" = 800; "height" = 448}
)
#Create XMLdoc
$doc = New-Object xml
#Create XML root node "xml"
$xml = $doc.AppendChild($doc.CreateElement("xml"))
#Create collectionnode for targets
$targets = $xml.AppendChild($doc.CreateElement("targets"))
#Create target-node for each resolution
foreach ($res in $resolutions) {
$target = $doc.CreateElement("target")
$target.AppendChild($doc.CreateElement("bitrate")).InnerText = $res["bitrate"]
$target.AppendChild($doc.CreateElement("width")).InnerText = $res["width"]
$target.AppendChild($doc.CreateElement("height")).InnerText = $res["height"]
$targets.AppendChild($target) | out-null
}
$doc.Save("C:\Users\graimer\Desktop\test.xml")test.xml
<xml>
<targets>
<target>
<bitrate>1100</bitrate>
<width>1920</width>
<height>1080</height>
</target>
<target>
<bitrate>800</bitrate>
<width>800</width>
<height>448</height>
</target>
<target>
<bitrate>400</bitrate>
<width>800</width>
<height>448</height>
</target>
<target>
<bitrate>128</bitrate>
<width>800</width>
<height>448</height>
</target>
<target>
<bitrate>64</bitrate>
<width>800</width>
<height>448</height>
</target>
</targets>
</xml>有关使用.Net的替代方法,请查看this SO question。
https://stackoverflow.com/questions/17052418
复制相似问题