부울, 비교 및 집합 식

필터 패턴에는 부울 식, 비교 식 및 집합 식이 포함될 수 있습니다.다음 표에 나열된 바로 가기는 이 XSLT(XSL Transformations) 구현에서 제공되는 대체 기호를 나타냅니다.이 설명서에서는 이러한 식 연산자에 대해 설명합니다.

연산자

설명

and

논리곱

or

논리합

not()

부정

=

같음

!=

같지 않음

< *

보다 작음

<= *

작거나 같음

> *

보다 큼

<= *

크거나 같음

|

집합 연산. 두 노드 집합의 통합을 반환합니다.

* 확장 XPath 메서드

연산자 키워드에 대한 W3C(World Wide Web 컨소시엄) 구문에서는 버전 2.5에서 사용된 달러 기호($)가 아닌 기타 구분 기호 및 공백을 사용합니다.W3C 구문에서 $xxx$ 형식의 이진 키워드를 wsxxxws로 나타낼 수 있습니다. 여기서 ws는 공백, 작은따옴표(') 또는 큰따옴표(")일 수 있는 토큰 종료자를 참조합니다.not()과 같은 단항 연산자는 함수 표기법을 사용합니다.Microsoft에서는 두 구문을 모두 지원하지만 이후 버전과의 호환성을 위해 W3C 구문을 사용하는 것이 좋습니다.

다음 표에서는 비교 연산자와 부울 연산자에 대한 우선 순위를 우선 순위가 높은 것부터 순서대로 보여 줍니다.

우선 순위

연산자

설명

1

( )

그룹화

2

[ ]

필터

3

/

//

경로 연산

4

< 또는 &lt;

<= 또는 &lt;=

> 또는 &gt;

>= 또는 &gt;=

비교

5

=

!=

비교

6

|

통합

7

not()

부울 not

8

And

부울 and

9

Or

부울 or

XSLT 스타일시트와 같은 XML 문서에서 연산자를 사용하는 경우 < 및 > 토큰을 각각 &lt; 및 &gt;로 이스케이프해야 합니다.예를 들어, 다음 XSLT 명령은 <price> 요소의 숫자 값이 10보다 작거나 같은 모든 <book> 요소에 대해 XSLT 템플릿 규칙을 호출합니다.

<xsl:apply-templates select="book[price &lt;= 10]"/>

DOM에 XPath 식을 사용할 경우 < 및 > 연산자를 이스케이프하지 않아도 됩니다.예를 들어, 다음 JScript 문은 <price> 요소의 숫자 값이 10보다 작거나 같은 모든 <book> 요소를 선택합니다.

var cheap_books = dom.selectNodes("book[price <= 10]");

부울 식을 사용하여 특정 값의 모든 노드나 전체 노드를 특정 범위 내의 노드와 결합할 수 있습니다.다음은 false를 반환하는 부울 식의 예제입니다.

1 &gt;= 2

연산자는 대/소문자를 구분합니다.

논리곱과 논리합

부울 연산자 and와 or는 각각 논리곱과 논리합 연산을 수행합니다.이러한 연산자를 그룹화 괄호와 함께 사용하여 보다 복잡한 논리 식을 빌드할 수 있습니다.

예제

참조 항목

author[degree and award]

<degree> 요소와 <award> 요소가 하나 이상 포함된 모든 <author> 요소

author[(degree or award) and publication]

<degree> 또는 <award> 요소 하나 이상과 <publication> 요소 하나 이상이 포함된 모든 <author> 요소

부울 not

부울 not 연산자는 필터 패턴 내에서 식의 값을 부정합니다.

예제

참조 항목

author[degree and not(publication)]

<degree> 요소 하나 이상이 포함되었지만 <publication> 요소가 포함되지 않은 모든 <author> 요소

author[not(degree or award) and publication]

<publication> 요소 하나 이상이 포함되었지만 <degree> 요소 또는 <award> 요소가 포함되지 않은 모든 <author> 요소

예제

XML 파일(test.xml)

<?xml version="1.0"?>
<test>

    <x a="1">
      <x a="2" b="B">
        <x>
          <y>y31</y>
          <y>y32</y>
        </x>
      </x>
    </x>

    <x a="2">
      <y>y2</y>
    </x>

    <x a="3">
      <y>y3</y>
    </x>

</test>

XSLT 파일(test.xsl)

다음 XSLT 스타일시트는 특성이 없는 모든 <x> 요소를 선택합니다.

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>

<!-- suppress text nodes not covered in subsequent template rule -->
<xsl:template match="text()"/>

<xsl:template match="*">
   <xsl:element name="{name()}">
      <xsl:apply-templates select="*|@*"/>
      <xsl:if test="text()">
         <xsl:value-of select="."/>
      </xsl:if>
   </xsl:element>
</xsl:template>

<xsl:template match="@*">
   <xsl:attribute name="{name()}">
      <xsl:value-of select="."/>
   </xsl:attribute>
</xsl:template>

<xsl:template match="/test">
  <xsl:apply-templates select="//x[not(@*)] "/>
</xsl:template>

</xsl:stylesheet>

출력

위의 XML 파일에 변환을 적용하면 다음 결과가 나타납니다.

<x>
   <y>y31</y>
   <y>y32</y>
</x>