Выберите дочерние узлы на основе их содержания

Я нашел решение, которое появилось на другом форуме.

AnyNumber = driver.find_elements_by_xpath('//*[starts-with(@id, "popover-")]')
buffer = 0
for AnyNumbers in AnyNumber:
    if int(AnyNumbers) > buffer:
        print('more than')
    elif int(AnyNumbers) < buffer:
        print('less than')
    else:
        print('is')
    buffer = int(AnyNumbers)
13
задан Dave Jarvis 30 June 2012 в 08:12
поделиться

1 ответ

Одно из простых решений вопроса OP является следующим выражением XPath:

*/*[.='bar']

Действительно обратите внимание на то, что никакая инструкция XSLT не включена - это - просто выражение XPath, таким образом, вопросом мог только быть отмеченный XPath.

Отсюда на, можно было использовать это выражение XPath в XSLT различными способами, например, для применения шаблонов на все выбранные узлы.

Например, ниже преобразование XSLT, которое берет XML-документ и производит другой, в который все элементы - дети <AA> чьему содержанию не равно "bar" удалены:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="AA">
      <xsl:copy>
         <xsl:apply-templates select="*[. = 'bar']"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется на исходный XML-документ:

<AA>
    <BB>foo</BB>
    <CC>bar</CC>
    <DD>baz</DD>
    <EE>bar</EE>
</AA>

к требуемому результату приводят:

<AA>
   <CC>bar</CC>
   <EE>bar</EE>
</AA>

Действительно отметьте:

В шаблоне соответствия мы обычно не должны указывать абсолютное выражение XPath, но просто относительное, таким образом, полное выражение XPath естественно упрощено до этого шаблона соответствия:

*[. = 'bar']
27
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: