XML文档深度?

时间:2010-03-30 06:09:28

标签: .net xml powershell xpath powershell-v2.0

如何使用powershell / xpath查找xml文件的深度?

考虑以下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(书店 - &gt; book - &gt; title / price)。

2 个答案:

答案 0 :(得分:1)

不要以为你可以用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"

答案 1 :(得分:0)

这样的东西
max(//*[not(*)]/count(ancestor::node()))

应该找到最大深度。但是你的Parser必须支持XPath 2.0。