2015-07-10 3 views
0

у меня есть документ SVG, который содержит узлы, подобные следующему:XPath - Get узел, который имеет только ребенок с определенным атрибутом

<item> 
    <g> 
     <path fill="#FFFFFF" ... ></path> 
     <path fill="none" ... ></path> 
     <ellipse fill="none" ... ></path> 
    </g> 
    <g> 
     <path fill="none" ... ></path> 
     <path fill="none" ... ></path> 
     <ellipse fill="none" ... ></path> 
    </g> 
    <g> 
     <path fill="#FFFFFF" ... ></path> 
     <path fill="#FFFFFF" ... ></path> 
     <ellipse fill="#FFFFFF" ... ></path> 
    </g> 
</item> 

То, что я пытаюсь сделать, это выбрать только <g> узлы, которые содержат только дети, у которых есть атрибут fill="none". Таким образом, я пытаюсь найти XPath, который соответствует только второму узлу <g> в моем примере.

Я сделал свою долю поиска и поиска в переполнении стека, и ничего не работает.

Ближайший, который, как я думал, ДОЛЖЕН работать, дает мне сообщение о том, что это не допустимое выражение XPath в инструментах разработчика Google Chrome с помощью помощника $x().

*[name()="g" and descendants::*[@fill="none"]]

Любая помощь приветствуется

Благодаря

ответ

3

Try:

*[ name()="g" 
    and descendant::*[@fill="none"] 
    and count(descendant::*[@fill="none"]) = count(descendant::*) 
] 
+0

Это все еще выбирает '' узлы, которые содержат 'Заправлять = "нет"' а также 'заливка = "# FFFFFF"'. – marcaddeo

+0

Плохо, я неправильно понял. Смотрите мой обновленный XPath –

+0

Это делает трюк! Спасибо! – marcaddeo

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