Необходимо получить значение атрибута из другого элемента XML файла - PullRequest
0 голосов
/ 03 августа 2020

Я хочу заменить атрибут из другого xml файла:

Входной html файл:

<p class="p heading">Heading</p>
<p class="normal">Text</p>

У меня есть указанный выше входной файл, который содержит атрибут класса , Я хочу заменить новое значение атрибута class, пока XSLT конвертирует

class. xml (отдельный файл):

   <name>
      <old>heading</old>
      <new>Headings</new>
   </name>
   <name>
      <old>normal</old>
      <new>Actual</new>
   </name>

XSL У меня есть:

<xsl:template match="p">
    <p>
        <xsl:apply-templates/>
    </p>
</xsl:template>

Ожидаемый результат:

<p class="Headings">Heading</p>
<p class="Actual">Text</p>

Необходимо заменить старое значение атрибута новым.

1 Ответ

0 голосов
/ 03 августа 2020

Я бы использовал ключ и просто сопоставил атрибуты class, имеющие ссылку, и преобразовал их

  <xsl:param name="class-map">
   <name>
      <old>heading</old>
      <new>Headings</new>
   </name>
   <name>
      <old>normal</old>
      <new>Actual</new>
   </name>
  </xsl:param>
  
  <xsl:key name="class-map" match="name/new" use="../old"/>
  
  <xsl:template match="p/@class[key('class-map', tokenize(.), $class-map)]">
      <xsl:attribute name="{name()}" select="key('class-map', tokenize(.) , $class-map)"/>
  </xsl:template>

Остальное обработать преобразованием идентичности. https://xsltfiddle.liberty-development.net/93dFK9P содержит онлайн-образец XSLT 3. Конечно, документ class-map может быть загружен с doc или document (например, <xsl:param name="class-map" select="doc('class.xml')"/>) из файла или URI в целом, только в строке выше для полноты и компактности примера.

...