XML 文档深度?

发布于 2024-08-26 21:35:21 字数 429 浏览 8 评论 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(书店 -> 书籍 -> 标题/价格)。

How to find the depth of the xml file using powershell/xpath?

consider the below 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>

depth of the above xml document is 3 (bookstore -> book -> title/price).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

摇划花蜜的午后 2024-09-02 21:35:21

不要认为使用 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"

Don't think you can do this with XPath but you could try this instead:

$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"
薄暮涼年 2024-09-02 21:35:21

类似的东西

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

应该找到最大深度。但您的解析器必须支持 XPath 2.0。

Something like

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

should find the max depth. But your Parser must support XPath 2.0.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文