Выражение XPath не находит совпадений в XSL - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь извлечь значения из моего файла RDF / XML, используя документ XSL. Выражение должно извлекать текстовое содержимое из элемента hasString из каждого элемента rdf: Description, ЕСЛИ элемент описания имеет значение атрибута type, равное «EnglishTerm» или «GermanTerm».

Выражение XPath:

rdf:RDF/rdf:Description[@type = '#EnglishTerm' or @type = '#GermanTerm']/hasString[text()]

Я использовал онлайновый тестер XPath и по какой-то причине работал только с одним веб-сайтом и не работал с другими. Я попытался использовать это в документе XSL, и это также не работало; XPath ничего не соответствует.

XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <xsl:output method="xml"/>
    <xsl:template match="/">
        <xsl:for-each select="rdf:RDF/rdf:Description">
            <test>
                <xsl:value-of select = "rdf:Description[@type = '#EnglishTerm' or @type = '#GermanTerm']/hasString[text()]"/>
            </test> 
        </xsl:for-each>
    </xsl:template>     
</xsl:stylesheet>

XML Фрагмент

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
   <rdf:Description rdf:ID="T000001" rdf:type="#EnglishTerm">
      <hasConceptPreferredTermYN>Y</hasConceptPreferredTermYN>
      <isPermutedTermYN>N</isPermutedTermYN>
      <hasLexicalTag>LAB</hasLexicalTag>
      <hasRecordPreferredTermYN>N</hasRecordPreferredTermYN>
      <hasString rdf:parseType="Literal">A-23187</hasString>
      <hasDateCreated>1990.03.08</hasDateCreated>
      <hasAbbreviation/>
      <hasSortVersion/>
      <hasEntryVersion/>
      <hasThesaurusID rdf:parseType="Literal">NLM (1991)</hasThesaurusID>
      <hasTermNote/>
   </rdf:Description>
</rdf:RDF>

Я хотел бы знать, что я могу сделать, чтобы исправить мой XPath выражение, чтобы оно работало с моим документом XSL.

1 Ответ

0 голосов
/ 23 февраля 2020

Внутри for-each узел контекста является элементом rdf:Description, в вашем образце они не вложены, поэтому попытка xsl:value-of select = "rdf:Description внутри никогда не выберет ничего, так как пытается выбрать rdf:Description дочерний элемент rdf:Description. Используйте . или self::node() или self::rdf:Description.

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