2010-03-30 91 views
0

如何使用powershell/xpath查找xml文件的深度?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(書店 - >書 - >標題/價格)。

回答

0

喜歡的東西

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

應該找到最大深度。但是你的解析器必須支持XPath 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"