Считать все атрибуты с путем из XML - PullRequest
0 голосов
/ 04 июля 2018

Я хотел бы получить путь XML и атрибуты (если они есть). Поскольку это большой XML, я не знаю, где находятся атрибуты. Так что это должно быть динамичным. Я много пробовал, проблема в том, что путь выглядит так, и у меня более одного шага в группе.

/root/group/step...

Вот пример XML:

<root>
  <group name="Name" attribute="some text" id="123123">
    <step name="Name" ...>Some more text
    </step>
    <step name="Name"...>2. Step
    </step>
  </group>
</root>

Edit:

$strXmlPathMain = "myXMl.xml"

$importXMLMain = Import-Clixml -Path $strXmlPathMain
[xml]$xml = $importXMLMain.root

function Get-Root-Structure {
    Param(
        $xml
    )

    $array = @()
    $nodesWithText = $xml.SelectNodes("//*")

    foreach ($node in $nodesWithText) {
        #Start with end of path (element-name of the node with text-value)
        $path = $node.LocalName
        #Get parentnode
        $parentnode = $node.ParentNode

        #Loop until document-node (parent of root-node)
        while ($parentnode.LocalName -ne '#document') {
            #If sibling with same LocalName (element-name) exists
            if (@($parentnode.ParentNode.ChildNodes | Where-Object {$_.LocalName -eq $parentnode.LocalName}).Count -gt 1) {
                #Add text-value to path
                #$path = "{0}\$path" -f ($parentnode.'#text').Trim()
            }

            #Add LocalName (element-name) for parent to path
            $path = "$($parentnode.Name)/$path"
            $path = $path.Replace("root", "")

            #Go to next parent node
            $parentnode = $parentnode.ParentNode
        }
        $array += $path
    }

    return $array 
}

$PathArray = Get-Root-Structure $xml

foreach($i in $PathArray){
    $xml | Select-Xml -XPath "$i" | select -ExpandProperty node
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...