соответствие шаблона - как указать условие ИЛИ - PullRequest
1 голос
/ 29 февраля 2012

Я хочу указать выражение соответствия в шаблоне, которое будет вызываться в многоуровневых пространствах имен элемента:

<xsl:template match="*[namespace-uri()='abc.com' or namespace-uri()='def.com']">
  ...
</xsl:template>

Но, похоже, это не работает.Он вызывается только в том случае, если левая сторона или выражение истинно.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Обычный подход к работе с пространствами имен состоит в том, чтобы объявить их, например,

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0"
  xmlns:abc="http://example.com/abc"
  xmlns:def="http://example.com/def"
  exclude-result-prefixes="abc def">

<xsl:template match="abc:* | def:*">...</xsl:template>

...

</xsl:stylesheet>

При этом я не вижу ничего плохого в вашем предикатном выражении or, кроме того, что вы не предоставили никакой информации, с которой его используете.

0 голосов
/ 29 февраля 2012
    <xsl:template match="*[namespace-uri()='abc.com' or namespace-uri()='def.com']"> 
      ... 
    </xsl:template>

But this does not seem to work. 

Это правильный код .

Итак, проблема в коде, который вы нам не показали. Пожалуйста, предоставьте также простой XML-документ, чтобы каждый мог применить предоставленный XSLT-код к предоставленному XML-документу и воспроизвести проблему.

Вот демонстрация того, что «подозреваемый» код верен :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="*[namespace-uri()='def.com' or namespace-uri()='abc.com']">
  <xsl:copy-of select="."/>
 </xsl:template>
</xsl:stylesheet>

когда это преобразование применяется к этому документу XML :

<a>
 <b:b xmlns:b="abc.com">
  <c/>
 </b:b>
 <f/>
 <d:d xmlns:d="def.com">
  <e/>
 </d:d>
</a>

желаемый, правильный результат получается :

<b:b xmlns:b="abc.com">
   <c/>
</b:b>
<d:d xmlns:d="def.com">
   <e/>
</d:d>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...