【问题标题】:How to get values of odd and even nodes in sql如何在sql中获取奇偶节点的值
【发布时间】:2016-10-10 18:04:36
【问题描述】:

本例中如何获取SQL中奇偶节点的值?

declare @htmlXML xml = N'<div class="screen_specs_container  "><div class="left_specs_container">Compatibility:</div><div class="right_specs_container "><h4>Acer ASPIRE 1200</h4></div><div class="left_specs_container" data-filterlabel="Replacement Part Type:">Replacement Part Type</div><div class="right_specs_container spec_highlight"> LCD Screen Only<a class="thickbox" title="" href="/laptopscreen_viewer.php?edit_language=English&amp;view_article=1468010881&amp;height=500&amp;width=800"><img valign="middle" alt="?" src="/images/question2.gif" border="0"></img></a></div><div class="left_specs_container" data-filterlabel="Size:">Size:</div><div class="right_specs_container" title="size">14.1-inch Screen (11.3"x8.4")<a class="lightbox" title="" href="//www.youtube.com/embed/_zalTiJ1vFY?autoplay=1"><img valign="middle" alt="?" src="/images/question2.gif" border="0"></img></a></div><div class="left_specs_container" data-filterlabel="Resolution:">Resolution:</div><div class="right_specs_container" title="resolution">XGA (1024x768)<a class="lightbox" title="" href="//www.youtube.com/embed/WWPSXibVLkg?autoplay=1"><img valign="middle" alt="?" src="/images/question2.gif" border="0"></img></a></div><div class="left_specs_container" data-filterlabel="Surface Type:">Surface Type:</div><div class="right_specs_container" title="type"><font color="red">Matte<a class="lightbox" title="" href="//www.youtube.com/embed/gt_CSbMF-5o?autoplay=1"><img valign="middle" alt="?" src="/images/question2.gif" border="0"></img></a></font></div><div class="left_specs_container" style="display:none" data-filterlabel="Touchscreen Panel:">Touchscreen Panel:</div><div class="right_specs_container" style="display:none">Not Included</div><div class="left_specs_container" data-filterlabel="Backlight type:">Backlight type:</div><div class="right_specs_container" title="backlight-type">CCFL 1-Bulb<a class="lightbox" title="" href="//www.youtube.com/embed/4F0xPuz4Jnw?autoplay=1"><img valign="middle" alt="?" src="/images/question2.gif" border="0"></img></a></div><div class="left_specs_container">Video signal connector:</div><div class="right_specs_container">30 pin CCFL screen[<a target="blank" class="thickbox laptops" title="Video Connector" href="/img/connectors/1_big/30pinsCCFL.jpg">image</a>]</div><div class="left_specs_container">Condition:</div><div class="right_specs_container">New Grade A+<a class="thickbox" title="" href="/laptopscreen_viewer.php?edit_language=English&amp;view_article=1243967715&amp;height=500&amp;width=800"><img valign="middle" alt="?" src="/images/question2.gif" border="0"></img></a></div><div class="left_specs_container">Warranty:</div><div class="right_specs_container">3 Years</div><div class="left_specs_container" style="color:#f00">Note:</div><div class="right_specs_container">Make sure new screen has same size, resolution, backlight as your old one!</div></div>'

SQL 代码:

SELECT  
    t.v.value('.','nvarchar(max)') as [TitleOfSpec],
    t.v.value('.','nvarchar(max)') as [valueOfSpec]
FROM
    @htmlXML.nodes('/div/div') AS p(parent)

输出

TitleOfSpec             ValueOfSpec
 (odd nodes)              (even nodes)
------------           ---------------
Compatibility:         Acer ASPIRE 1200
Replacement Part Type   LCD Screen Only
.....                       ......

感谢朋友们的建议

【问题讨论】:

    标签: html sql sql-server


    【解决方案1】:

    此方法首先展开 div。
    并使用 row_number 获得排名,将偶数节点与不均匀节点连接起来。

    WITH Divs AS 
    (
        SELECT 
        row_number() over (order by (select 0)) as rn,
        x.div.value('.','nvarchar(max)') as val
        from @htmlXML.nodes('/div/div') x(div) 
    )
    select
    divs1.val as TitleOfSpec,
    divs2.val as ValueOfSpec
    from Divs divs1
    left join Divs divs2
      on (divs1.rn+1 = divs2.rn)
    where divs1.rn%2>0;
    

    【讨论】:

    • 感谢您的提示,亲爱的@LukStorms。你能帮我这个问题吗? stackoverflow.com/questions/39932915/…
    • 这是什么? on (divs1.rn+1 = divs2.rn) 其中 divs1.rn%2>0;
    • sql 执行 Divs CTE 的自连接。例如,如果 RN = 3,则 RN+1=4。所以你加入 3 到 4。x%2 是 x 的模数 2。如果一个数的模 2 等于 0,则该数是偶数。
    • 对于模数? MS 已将其记录在案 here
    • 对于行号?
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2021-11-23
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多