Выберите конкретный узел, отвечающий нескольким условиям - PullRequest
1 голос
/ 05 марта 2012

Моя проблема заключается в следующем: я пытаюсь применить определенный template к узлам, удовлетворяющим нескольким условиям.Мой XML выглядит следующим образом:

<Root>
  <A>
    <id>1</id>
    <B>
      <C>
        <name>C_name1</name>
        <D>
          <E>label1</E>
          <E>label2</E>
        </D>
      </C>
      <C>
        <name>C_name2</name>
        <D>
          <E>label1</E>
          <E>label3</E>
        </D>
      </C>
    </B>
  </A>
  <A>
    ...
  </A>
</Root>

Я хочу выбрать все A узлы, такие, что A[B/C/name = 'specific_name'] И если этот узел существует, я также хочу, чтобы A такой узел встречал D/E = `specific_label'.Поэтому я хочу что-то вроде A[B/C[name = 'specific_name']/D/E = 'specific_label'], но этот синтаксис не работает ...

Каков правильный синтаксис для выполнения моих требований и применения моего шаблона к нужным узлам?

Спасибо за вашпомощь!

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

Помимо ответа, который вы нашли, можно использовать следующее выражение XPath:

A[B/C[name='specific_name' and D/E='specific_label']] 

Это единственный правильный способ соединения нескольких условий, если некоторые из них содержат функцию position() , которая зависит от контекста и обычно имеет разные значения при включении в разные предикаты.

1 голос
/ 05 марта 2012

На самом деле правильный синтаксис выглядит так:

<xsl:template match="Root">
    <xsl:apply-templates select="A[B/C[name='specific_name'][D/E='specific_label']]" />
</xsl:template>

Надеюсь, это поможет! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...