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

时间:2012-01-27 20:24:24

标签: 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 line</span></a>
</li> 
<li style="margin-left: 6px">
        <a hre="">
        <span id="spanid">2nd line</span></a>
</li>
</ul>
</div>

我正在解析这个html部分并使用xpath查询

$xpath->query('//div[@id="divid"]/ul[@id="ulid"]/li/a');

我想要的输出是

  

第一行第二行

据我了解,如果第一个“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>
    

    我要提取

      

    工艺品,爱好&amp;家庭等在span标签中关闭

  • 1 个答案:

    答案 0 :(得分:4)

    将提供的表达式置于面值 - 忽略表达式与其描述之间的任何矛盾 - 您可以使用以下表达式排除包含a的li元素strong孩子:

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