Php 运行xpath查询时排除dom树中的标记

Php 运行xpath查询时排除dom树中的标记,php,dom,xpath,attributes,domdocument,Php,Dom,Xpath,Attributes,Domdocument,我有一个这样的html结构 <div id="divid"> <ul id="ulid"> <li style="margin-left: 8px"> <strong>books</strong> </li> <li style="margin-left: 6px"> <a hre=""> <span id="spanid">first l

我有一个这样的html结构

<div id="divid"> 
<ul id="ulid">
<li style="margin-left: 8px">
        <strong>books</strong>
</li>
<li style="margin-left: 6px">
        <a hre="">
        <span id="spanid">first line</span></a>
</li> 
<li style="margin-left: 6px">
        <a hre="">
        <span id="spanid">2nd line</span></a>
</li>
</ul>
</div>
我想要的结果是

第一行
第二行

据我所知,如果第一个“li”标记中没有“strong”标记,那么xpath查询就可以了
  • 请注意,第一个“li”标记具有强标记,而所有其他li标记中都具有span标记
    现在我想从xpath查询中排除'li'标记(其中包含'strong'标记),这样我就可以在li标记中获得锚定标记下方的标记值
    如何修改xpath查询使之成为可能?有什么指导方针吗

    我工作的原始代码是

    <ul data-typeid="n" id="ref_1000">
    
         <li style="margin-left: -18px;">
                                                <a href="/s/ref=sr_ex_n_0?rh=i%3Aaps%2Ck%3Ahow+to+grow+tomatoes&amp;sort=salesrank&amp;keywords=how+to+grow+tomatoes&amp;ie=UTF8&amp;qid=1327692925">‹ <span class="expand">Any Department</span></a>
                                                </li>
                                        <li style="margin-left: 8px;">
                                                <strong>Books</strong>
                                            </li>
                                        <li style="margin-left: 6px;">
    
                                   <a href="/s/ref=sr_nr_n_0?rh=k%3Ahow+to+grow+tomatoes%2Cn%3A283155%2Cp_n_feature_browse-bin%3A618073011%2Cn%3A%211000%2Cn%3A48&amp;bbn=1000&amp;sort=salesrank&amp;keywords=how+to+grow+tomatoes&amp;ie=UTF8&amp;qid=1327692925&amp;rnid=1000">
                            <span class="refinementLink">Crafts, Hobbies &amp; Home</span><span class="narrowValue"> (19)</span>
                                    </a>
                        </li>
                <li style="margin-left: 6px;">
                                   <a href="/s/ref=sr_nr_n_1?rh=k%3Ahow+to+grow+tomatoes%2Cn%3A283155%2Cp_n_feature_browse-bin%3A618073011%2Cn%3A%211000%2Cn%3A10&amp;bbn=1000&amp;sort=salesrank&amp;keywords=how+to+grow+tomatoes&amp;ie=UTF8&amp;qid=1327692925&amp;rnid=1000">
                            <span class="refinementLink">Health, Fitness &amp; Dieting</span><span class="narrowValue"> (3)</span>
    
                                    </a>
                        </li>
                <li style="margin-left: 6px;">
                                   <a href="/s/ref=sr_nr_n_2?rh=k%3Ahow+to+grow+tomatoes%2Cn%3A283155%2Cp_n_feature_browse-bin%3A618073011%2Cn%3A%211000%2Cn%3A6&amp;bbn=1000&amp;sort=salesrank&amp;keywords=how+to+grow+tomatoes&amp;ie=UTF8&amp;qid=1327692925&amp;rnid=1000">
                            <span class="refinementLink">Cookbooks, Food &amp; Wine</span><span class="narrowValue"> (2)</span>
                                    </a>
                        </li>
    
                </ul>
    
    • 书籍
    我想提取

    工艺、爱好和家庭等在span标签中关闭


    从表面上看提供的表达式——即忽略表达式与您对它的描述之间的任何矛盾——您可以使用以下表达式排除包含
    strong
    子元素的
    li
    元素:

    //div[@id="divid"]/ul[@id="ulid"]/li[not(strong)]/a
    

    从表面上看提供的表达式——即忽略表达式与您对它的描述之间的任何矛盾——您可以使用以下表达式排除包含
    strong
    子元素的
    li
    元素:

    //div[@id="divid"]/ul[@id="ulid"]/li[not(strong)]/a
    

    xpath查询不应该是
    //div[@id=“divid”]/ul[@id=“ulid”]/li/span
    ?谢谢cambraca,这是一个笔误,我已经为您的观点修复了代码。看来您应该只针对span://span[@class=“refinementLink”]xpath查询不应该是
    //div[@id=“divid”]/ul[@id=“ulid”]/li/span
    ?谢谢cambraca,这是一个文书错误,我现在已经为您的观点修复了代码..似乎您应该只针对span://span[@class=“refinementLink”]谢谢,理论上,它应该可以工作,我已经尝试过,现在再次尝试过,但它工作不好,根据您提供的源代码输入,它可以工作。我总是在发帖前测试我的答案。最有可能的情况是,您的实际文档与您向我们展示的文档在某些方面有所不同。或者是XPath之外的东西出了问题,但是你没有向我们展示任何代码。谢谢lwburk,我仔细地转换了代码,不管怎样,我现在已经粘贴了原始代码。谢谢,理论上,它应该可以工作,我已经试过了,现在又试过了,但效果不好,根据您提供的源输入,它正在工作。我总是在发帖前测试我的答案。最有可能的情况是,您的实际文档与您向我们展示的文档在某些方面有所不同。或者是XPath之外的东西出了问题,但是您没有向我们展示任何代码。感谢lwburk,我仔细地转换了代码,无论如何,我现在已经粘贴了原始代码。。