首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sql中计算两个节点之间的公共节点

如何在sql中计算两个节点之间的公共节点
EN

Stack Overflow用户
提问于 2016-09-17 11:04:27
回答 1查看 60关注 0票数 0

如何在此示例中计算sql中两个节点之间的公共节点:

计数<li>标记在<h2 id="vgn">VGN A </h2><h2 id="vgn">VGN </h2>之间以及<h2>标记的数量。

换句话说:在本例中,h2、number1和h2数字2之间的li计数。

代码语言:javascript
复制
<table class="table table-condensed table-no-border table-brand-main">
    <tr><td><h2 id="vgn">VGN A </h2></td></tr>
    <tr><td>
    <style>
        ul.brand_572 {
                 -moz-column-count: 6;
              -webkit-column-count: 6;
                      column-count: 6;
            }
        ul.brand_572 li
        {
            width:120px;
        }
        /*ul.brand_572 li a.product-title
        {
            width:120px;
        }*/
    </style>
    <ul class="specialclass brand_572">        
        <li>
            <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
        </li>    
        <li>
            <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
        </li>    
        <li>
            <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
        </li>    
        <li>
            <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
        </li>    
        <li>
            <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
        </li>    
        <li>
            <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
        </li>    
        <li>
            <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
        </li>    
    </ul>
    </td>
    </tr>
    <tr><td><h2 id="vgn">VGN </h2></td></tr>
    <tr><td>
        <ul class="specialclass brand_572">        
            <li>
                <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
            </li>    
            <li>
                <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
            </li>    
            <li>
                <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
            </li>    
            <li>
                <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
            </li>    
            <li>
                <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
            </li>    
            <li>
                <a href="sony-vgn-ar290g-battery-6cells-4400mah-11-1v.html">Sony  VGN-AR290G </a>
            </li>    
        </ul>
    </td></tr>
</table>

预期产出:

代码语言:javascript
复制
count of li  between h2 and h2
      7              1      2

c.li = no.h2 1,2之间的7

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-17 21:09:09

现在您已经提出了三个问题,都是关于您想用T解决的HTML的一些问题。

As I told you before

tool不是解决问题的合适工具!

我已经告诉过您,您对XML有一个深刻的误解。你又做了一次:你用xml标记了你的问题。,但这不是XML (即使它看起来像)!这是HTML!

SQL Server对XML提供了很大的支持,但它不是HTML的合适工具。使用HTML解析器或任何过程语言自己编写解析算法。

请务必给您一个想法,为什么Server不是正确的工具:

在您的特殊情况下--,但是您永远不能依赖这个!-您的是有效的。在这种情况下--而且只有在这种情况下才是--人们可以考虑XQuery。在<li>元素之后计数<h2>元素可能如下所示:

代码语言:javascript
复制
DECLARE @s VARCHAR(MAX)='Your HTML here';
DECLARE @xml XML=CAST(@s AS XML); --you'd get your first error here probably

DECLARE @H2_id VARCHAR(100)='vgn';
SELECT COUNT(*) AS CountOnThisLevel
FROM @xml.nodes('//h2[@id=sql:variable("@H2_id")]/../../../tr[2]/td/ul/li') AS A(li)

结果是7,你喜欢的话.

这条路

代码语言:javascript
复制
//h2[@id=sql:variable("@H2_id")]/../../../tr[2]/td/ul/li

如下所示:

使用等于变量“”内容的id-属性搜索文档中的任意h2。现在向上移动三个层次,然后取第二个<tr>,然后向下移动到<td><ul><li>。数一数你在那里找到了多少。

看上去不错,但是

  • <h2>可能是<H2> (XQuery是区分大小写的!)
  • HTML可能使用<thead><tfoot>
  • 链上可能有<div>-tags
  • -几乎可以肯定!-你的真实的HTML不是有效的XML。
  • 还有更多的原因,为什么这种方法不好!

你真的应该转过身去寻找合适的工具!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39546063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档