* +1000 *
Используйте
/*/p[starts-with(@class, 'matt')] | /*/p[starts-with(@class, 'matt')]/text()
Это выбирает любые элементы p
, которые являются дочерними по отношению к верхнему элементу документа XML, и значение атрибута class
которого начинается с "matt"
, а также любого дочернего элемента текстового узла любого такого элемента p
.
При оценке по этому документу XML (ни один не был предоставлен!):
<html>
<p class="mattFacer">Matty</p>
<p class="mattSmith">Matthew</p>
<p class="suzieSmith">Suzie</p>
</html>
следующие узлы выбраны (каждый на отдельной строке) и доступны по позиции:
<p class="mattFacer">Matty</p>
Matty
<p class="mattSmith">Matthew</p>
Matthew
Вот быстрая проверка XSLT :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select=
"/*/p[starts-with(@class, 'matt')]
|
/*/p[starts-with(@class, 'matt')]/text()
">
<xsl:copy-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Результатом этого преобразования при применении к тому же XML-документу (см. Выше) является ожидаемая правильная последовательность выбранных узлов :
<p class="mattFacer">Matty</p>
Matty
<p class="mattSmith">Matthew</p>
Matthew