как выбрать элемент xml на основе его значения атрибута, начиная с "заголовка" в xslt?

Я хочу вызвать свой собственный шаблон xsl всякий раз, когда я нашел соответствие xml-элемента, имеющего значение атрибута, начинающееся с "заголовок".Как сделать этот запрос в Xslt.

например:

<w:p>
  <w:pPr>
     <w:pStyle w:val="Heading2"/>
  </w:pPr>
</w:p>

<w:p>
  <w:pPr>
     <w:pStyle w:val="Heading1"/>
  </w:pPr>
</w:p>

<w:p>
  <w:pPr>
     <w:pStyle w:val="Heading2"/>
  </w:pPr>
</w:p>

<w:p>
  <w:pPr>
     <w:pStyle w:val="ListParagraph"/>
  </w:pPr>
</w:p>

<w:p>
  <w:pPr>
     <w:pStyle w:val="commentText"/>
  </w:pPr>
</w:p>

Итак, я хочу сделать запрос, что w:pStyle -> w: val, начиная только с "заголовка".

пожалуйста, помогите мне выйти из этой проблемы...

1 ответов


вы можете достичь этого, используя строковую функцию XPath, начинающуюся с

<xsl:template match="w:pStyle[starts-with(@w:val, 'Heading')]">

Это просто соответствует всем w: pStyle узлы, где w:val атрибуты начинаются со слова заголовок. Затем вы можете поместить свой код в этот шаблон.

вот пример того, как вы могли бы использовать его в XSLT identity transform

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="http://mynamespace.com">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="w:pStyle[starts-with(@w:val, 'Heading')]">
      <!-- Your code here -->
   </xsl:template>

   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

выше XSLT, если вы не добавили свой собственный код, где он говорит, будет полосы все mathcing w: pStyle элементы из XML.