как выбрать элемент 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.