Глубина документа XML? - PullRequest
0 голосов
/ 30 марта 2010

Как найти глубину XML-файла с помощью powershell / xpath?

рассмотрите ниже XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title>Harry Potter</title>
  <price>25.99</price>
</book>
<book>
  <title>Learning XML</title>
  <price>49.95</price>
</book>
</bookstore>

глубина указанного выше XML-документа - 3 (книжный магазин -> книга -> название / цена).

Ответы [ 2 ]

1 голос
/ 18 июля 2013

Не думаю, что вы можете сделать это с XPath, но вы можете попробовать это вместо этого:

$xml = [xml]"<?xml version=`"1.0`" encoding=`"ISO-8859-1`"?>
  <bookstore>
    ...
</bookstore>"
[System.Xml.XmlElement] $root = $xml.DocumentElement
$script:depth = 1

function dfs([System.Xml.XmlElement] $node, [int] $level) 
{
    foreach ($child in $node.ChildNodes)
    {
        if ($child.NodeType -eq 'Element')
        {
            dfs $child ($level+1)
        }
    }
    $script:depth = [Math]::Max($depth, $level)
}

dfs $root $script:depth
"Depth: $depth"
0 голосов
/ 30 марта 2010

Что-то вроде

max(//*[not(*)]/count(ancestor::node()))

должен найти максимальную глубину. Но ваш парсер должен поддерживать XPath 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...