Как выбрать элемент XML на основе значения его атрибута, начиная с «Заголовок» в xslt? - PullRequest
8 голосов
/ 01 августа 2011

Я хочу вызывать свой собственный шаблон 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 Ответ

13 голосов
/ 01 августа 2011

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

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

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

Вот пример того, как вы могли бы использовать его в преобразовании идентичности XSLT

<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, если вы не добавили вассобственный код, в котором написано, удалит все математические элементы w: pStyle из XML.

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