powershell - 使用 Powershell 对 XML 进行排序

标签 powershell xml-parsing

所以我有一些 XML,我要在其上创建一个集合,然后尝试根据元素对其进行排序,但它不起作用。

我的代码

$xml = [xml](Get-Content $args)

function readServersfromXML ( ) {

    $xml.Settings.Server | select -ExpandProperty Name
}

function readServerServicesfromXML ( $server ) {
    $xml.Settings.Server | Where-Object {$_.Name -eq $server} | Select-Object -ExpandProperty Services
}

function getServerServiceStatus ( $servers ) {

    foreach ( $server in $servers ) {
        $services = ( readServerServicesfromXML $server )
        foreach ( $service in $services.ChildNodes ) {
      $service | Sort-Object StartOrder
        }
    }
}

$servers = readServersfromXML
getServerServiceStatus ( $servers )

XML

<?xml version="1.0"?>
<Settings>
  <Server>
    <Name>Server1</Name>
    <StartOrder>1</StartOrder>
    <Services>
      <Service>
        <Name>Service1</Name>
        <StartOrder>1</StartOrder>
      </Service>
      <Service>
       <Name>Service2</Name>
       <StartOrder>2</StartOrder>
      </Service>
      <Service>
        <Name>Service4</Name>
        <StartOrder>4</StartOrder>
      </Service>
      <Service>
       <Name>Service3</Name>
       <StartOrder>3</StartOrder>
      </Service>
    </Services>
  </Server>
</Settings>

我希望输出是这样的

Name                                                        StartOrder
----                                                        ----------
Service1                                                    1
Service2                                                    2
Service3                                                    3
Service4                                                    4

我不断得到的输出是这样的:

Name                                                        StartOrder
----                                                        ----------
Service1                                                    1
Service2                                                    2
Service4                                                    4
Service3                                                    3

有人有想法吗?我试过将 StartOrder 转换为 [int] 但这也不起作用。提供任何帮助。

最佳答案

此函数的修改版本按 StartOrder 升序排序:

function getServerServiceStatus ( $servers ) 
{
    foreach ( $server in $servers ) 
    {
        $services = ( readServerServicesfromXML $server )
        $services.ChildNodes | Sort-Object { [int] $_.StartOrder}
    }
}

输出是:

Name                                                        StartOrder
----                                                        ----------
Service1                                                    1
Service2                                                    2
Service3                                                    3
Service4                                                    4

关于powershell - 使用 Powershell 对 XML 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33510035/

相关文章:

java - XMLPullParser 解析器无法解析 xml 标记内的 "(??????) [????] &middot;"

java - 将 byte[] 馈送到 SAXParser

python - (Python) 属性错误 : 'NoneType' object has no attribute 'text'

python - XML PARSER - 解析大文件以获得特定格式的输出

powershell - 参数的变量类型问题? - 电源外壳

PowerShell 变量冲突

powershell - 使用 Powershell 获取上次登录时间、计算机和用户名

powershell - 使用 PowerShell 在更改时复制文件

windows - 如何使用 Powershell 执行查找命令

java - Java中的xml解析并写入另一个xml文件