如何计算sql中两个节点之间的公共节点:
在<li>
和<h2 id="vgn">VGN A </h2>
之间计算<h2 id="vgn">VGN </h2>
个代码以及<h2>
代码的数量。
换句话说:在这个例子中,h2 number1和h2 number 2之间的li计数。
<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>
预期产出:
count of li between h2 and h2
7 1 2
c.li = no.h2 1,2之间的
答案 0 :(得分:1)
您现在已经提出了三个问题,所有问题都与您希望使用T-SQL解决的HTML
问题有关。
我告诉过你,你对XML 有一种深刻的误解。你已经完成了这件事:你用xml
标记了你的问题。 但这不是XML(即使它看起来像)!这是HTML!
SQL Server为XML提供了很好的支持,但它不是HTML的正确工具。使用HTML解析器或任何过程语言自己编写解析算法。
只是给你一个想法,为什么SQL Server不是正确的工具:
在你的特殊情况下 - 但是你永远不能依赖这个!!! - 你的HTML是有效的XML。在这种情况下 - 并且仅在这种情况下! - 可以考虑XQuery
。在<li>
元素之后计算<h2>
- 元素可能如下所示:
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,你喜欢它......
此路径
//h2[@id=sql:variable("@H2_id")]/../../../tr[2]/td/ul/li
读起来像这样:
使用id-attribute搜索文档中任何位置的任何h2 等于变量“H2_id”的内容。现在移动三个级别 向上,然后取第二个
<tr>
,向下移动到<td>
,<ul>
和<li>
。统计你在那里找到了多少。
看起来不错,但是
<h2>
可能是<H2>
(XQuery区分大小写!)<thead>
和<tfoot>
<div>
个标签你应该转身寻找合适的工具!