2014-11-27 4 views
1

У меня есть HTML-файл, и я разбираю его с XPath. Я хочу выбрать все [div] узлы, которые не имеют [p] тегов (ов) в нем.XPath: все divs, у которых нет определенного дочернего элемента

Например, вход:

<div> 
    <p>no1</p> 
</div> 
<div> 
    <div> 
     <p>no2</p> 
    </div> 
</div> 
<div> 
    yes!!! 
</div> 

Ожидаемый результат:

yes!!! 

Я попробовал этот XPath запрос, который не работает для меня:

//div[not (p)] 

ответ

0

XPath:

//div[not (p)] 

возвращает 2 div Узлы в образце XML:

<div> <-- This one 
    <div> 

и предполагаемое одно:

<div> 
    yes!!! 
</div> 

Вы, возможно, ссылки на XPath в запросе, где вы ожидаете только один узел (например, SelectSingleNode), и поэтому возвращается только первый узел.

1

Использование // ДИВ [нет (потомка :: р)]

Вот быстрый образец XSL

<xsl:template match='/'> 
<div> 
<xsl:for-each select='//div[not(descendant::p)]'> 
    <xsl:value-of select='.'/> 
</xsl:for-each> 
</div> 
</xsl:template> 
+0

Может добавить некоторую информацию, которую 'p' равно' ребенка: p' или ' ./p' и соответствует только детям. Хотя 'descendant :: p' или' .// p' соответствуют всем узлам-потомкам. – ThW

Смежные вопросы