2009-07-16 3 views
5

Можно ли сопоставлять атрибуты, которые не принадлежат к подмножеству атрибутов? Например, я хотел бы совместить все, кроме @ attr1 и @ attr2. Есть ли способ написать оператор сопоставления шаблонов, аналогичный следующему, или я об этом неправильно?XSLT не соответствует определенным атрибутам

<xsl:template match="NOT(@attr1) and NOT(@attr2)">  

Благодаря

ответ

7

Проще всего было бы использовать два шаблона:

<xsl:template match="@attr1|@attr2"/> 
<xsl:template match="@*"> 
    .... 
</xsl:template> 

Первый шаблон будет отлавливать ссылки на те, которые вы хотите игнорировать, а просто едят их. Второй будет соответствовать оставшимся атрибутам.

+0

Это отлично работает. Спасибо. – Steve

+0

Как насчет того, если в какой-то другой момент скрипта я бы хотел обработать атрибуты, которые были исключены. Вы знаете, что это возможно? В основном у меня есть сотни атрибутов, которые мне нужно сопоставить, и все они требуют одного и того же действия, и только очень небольшое подмножество требует специальной обработки. Поэтому я хотел бы исключить те, кому нужна специальная обработка, пока я не решит их обработать. Мне просто нужно распечатать имена атрибутов и назначенное значение. – Steve

+1

Я действительно решил проблему, используя режимы в сочетании с вашим решением выше. .... ... Steve

2

Что такое запрос о возможностях. Используйте следующее:

<xsl:template match="@*[local-name()!='attr1' and local-name()!='attr2']"> 
    .... 
</xsl:template> 

Это особенно полезно, если вы хотите изменить атрибут или добавить его, если отсутствуют жгуты одну операции копирования. Другой ответ не работает в такой ситуации. например

... 
    <xsl:copy> 
    <xsl:attribute name="attr1"> 
     <xsl:value-of select="'foo'"/> 
    </xsl:attribute> 
    <xsl:apply-templates select="@*[local-name()!='attr1']|node()"/> 
    </xsl:copy> 
    ... 
Смежные вопросы