powershell 如何解析这个(内部的)xml?

q8l4jmvw  于 2023-02-23  发布在  Shell
关注(0)|答案(1)|浏览(121)

我对powershell很陌生,我有点卡住了。
我有这个innerXML:

<sl-test.protocol>HTTP</sl-test.protocol>
    <sl-test.responseTimeout>14000</sl-test.responseTimeout>
    <env>${myenv}</env>
    <http.port>8081</http.port>

我想把它转换成一个.properties文件,格式如下:

sl-test.protocol=HTTP
sl-test.responseTimeout=14000
env=${myenv}
http.port=8081

我有部分创建.properties文件(硬编码值现在),它的工作:

$test = New-Item -Name "mule-app.properties" -ItemType "file" -Value "test.prop=testprop`ntest2.prop=test2prop"

所以基本上我需要从innerXML转到一个由'n分隔的键/值组成的大字符串,但是我还需要用一个反勾号转义任何$
所需字符串:

sl-test.protocol=HTTP`nsl-test.responseTimeout=14000`nenv`${myenv}`nhttp.port=8081

但是现在我甚至不能迭代所有的键和值。
注意:键和值是动态的,并不总是这4个
任何帮助都将不胜感激。

iovurdzv

iovurdzv1#

[xml]System.Xml.XmlDocument示例中节点的.ChildNodes属性允许您循环访问给定XML元素的(System.Xml.XmlElement)子元素。

# Sample XML input.
[xml] $xml = @'
<el>
    <sl-test.protocol>HTTP</sl-test.protocol>
    <sl-test.responseTimeout>14000</sl-test.responseTimeout>
    <env>${myenv}</env>
    <http.port>8081</http.port>
</el>
'@

# Loop over all child elements of the document element.
$xml.el.ChildNodes |
  ForEach-Object {
    # Create and output a line for the output file, based on the 
    # element's name and inner text, with "$" escaped as "`$"
    '{0}={1}' -f $_.Name, $_.InnerText.Replace('$', '`$')
  } | # Set-Content out.properties -Encoding utf8

取消注解并根据需要调整Set-Content调用。

相关问题