XSLT не соответствуют определенным атрибутам - PullRequest
5 голосов
/ 16 июля 2009

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

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

Спасибо

Ответы [ 2 ]

7 голосов
/ 16 июля 2009

Самый простой способ - использовать два шаблона:

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

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

2 голосов
/ 16 октября 2012

То, что можно задать, возможно. Используйте следующее:

<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>
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...