XSLT: невозможно выбрать правильного предка по имени - PullRequest
0 голосов
/ 01 мая 2018

Я получаю запутанное поведение при попытке выбрать узел предка в файле XML. XML выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<document version="2">
  <interlinear-text>
    <paragraphs>
      <paragraph>
        <phrases>
          <phrase>
            <item type="segnum" lang="en">1.1</item>
            <words>
              <word>
                <morphemes>
                  <morph type="stem">
                    <item type="cf" lang="tmy-Latn">yau</item>
                    <item type="txt" lang="tmy-Latn">yau</item>
                    <item type="gls" lang="en">1S</item>
                  </morph>
                </morphemes>
              </word>
              <word>
                <morphemes>
                  <morph type="stem">
                    <item type="cf" lang="tmy-Latn">ma</item>
                    <item type="txt" lang="tmy-Latn">ma</item>
                    <item type="gls" lang="en">and</item>
                  </morph>
                </morphemes>
              </word>
              ...

Итак, в XSLT я нахожусь в шаблоне, соответствующем узлам morph / item, и я пытаюсь использовать ancestor::*[word], и вместо этого он возвращает элемент <words>. Даже если я скажу ancestor::*[word][1]. Почему он выбирает элемент, который даже не соответствует тому, что я просил ?! Как заставить его выбрать элемент word по имени из элемента item с помощью функции предка?

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете использовать следующий xpath, чтобы найти все узлы <word>, которые соответствуют тексту элемента ограничения [1], равному ma, вы можете адаптировать условие извлечения по своему усмотрению.

XPATH:

//morphemes/morph/item[1][text()='ma']/ancestor::word

DEMO:

(xmllint --xpath "//morphemes/morph/item[1][text()='ma']/ancestor::word" test_ancestors.xml; echo) | xmllint --format -
<?xml version="1.0"?>
<word>
  <morphemes>
    <morph type="stem">
      <item type="cf" lang="tmy-Latn">ma</item>
      <item type="txt" lang="tmy-Latn">ma</item>
      <item type="gls" lang="en">and</item>
    </morph>
  </morphemes>
</word>

Дайте мне знать, поможет ли это вам.

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