Подтвердить что ты не робот

Как выбрать два атрибута из одного и того же node с одним выражением в XPath?

Например:

//person[@id='abc123']/@haircolor|/@weight"

PS. существует множество записей "человек"

4b9b3361

Ответ 1

Попробуйте следующее:

//person[@id='abc123']/@*[name()='weight' or name()='haircolor']

Если вы используете процессор XPath 2.0, вы также можете использовать более красивую опцию:

//person[@id='abc123']/(@haircolor|@weight)`

Ответ 2

Вы хотите найти человеческие узлы на основе значения нескольких атрибутов. Если это вопрос, тогда вы можете просто использовать & s, например.

//person[@id='abc123' and @haircolor='blue' and @weight='...']

Если вы хотите выполнять поиск по одному атрибуту, но возвращаете значения других атрибутов, я бы сделал что-то вроде этого:

 <xsl:template match="person[@id='abc123']">
     <xsl:value-of select="@haircolor"/>
     <xsl:value-of select="@weight"/>
  </xsl:template>

Ответ 3

Если вы пытаетесь получить значения указанных атрибутов, я бы предложил ввести переменную для запрашиваемого человека.

<xsl:variable name="person" select="//person[@id = 'abc123']" />

После этого вы можете получить любой атрибут от запрашиваемого пользователя, используя указанную переменную.

<xsl:value-of select="$person/@haircolor" />
<xsl:value-of select="$person/@weight" />