.net 에서 XSLT 를 사용 하여 xml 문 서 를 변환 하 는 예 시 를 분석 합 니 다.

XSL 확장 이 가능 한 스타일 시트 파일 입 니 다.xml 디 스 플레이 를 포맷 할 수도 있 고 xml 를 필요 한 다른 형식 으로 변환 할 수도 있 습 니 다.XSL 을 배 우려 면 XPath 를 익 혀 야 합 니 다.XSL 은 XPath 와 마찬가지 로 간단 하고 강해 서 배우 기 쉽다.1.XSL 이 xml 디 스 플레이 스타일 을 포맷 할 수 있 으 니 xml 에서 xsl 파일 을 참조 하 는 방법 을 살 펴 보 겠 습 니 다.다음 코드 예제:xml 파일 의 문서 설명 뒤에즉,2.XSL 형식 XSL 도 표준 xml 파일 입 니 다.xml 문서 로 시작 합 니 다.루트 요 소 는 xsl:styleshee 여야 합 니 다.또한 루트 요 소 는 version 속성 이 xsl 버 전 을 지정 해 야 합 니 다.xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xsl 네 임 스페이스 를 지정 합 니 다.다음 예제3.Xsl 요점 은 다음 과 같은 예시 xml

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet  type="text/xsl" href="pets-templates.xsl"?>
<pets>
  <pig color="blue" weight="100">
    <price>100</price>
    <desc>this is a blue pig</desc>
  </pig>
  <cat color="red" weight="9">
    <price>80</price>
    <desc>this is a red cat</desc>
  </cat>
  <dog color="green" weight="15">
    <price>80</price>
    <desc>this is a green dog</desc>
  </dog>
  <cat color="green" weight="15">
    <price>80</price>
    <desc>this is a green cat</desc>
  </cat>

 
  <dog color="blue" weight="10">
    <price>100</price>
    <desc>this is a blue dog</desc>
  </dog>
  <dog color="red" weight="9">
    <price>80</price>
    <desc>this is a red dog</desc>
  </dog>
</pets>
위의 xml 가 xsl 포맷 을 통 해 표 시 된 효 과 는 다음 과 같다.
1)xsl:template 는 노드 와 일치 하 는 변환 템 플 릿 을 정의 합 니 다.속성 match="xpath expression"은 템 플 릿 과 일치 하 는 요 소 를 다음 과 같이 정의 합 니 다.루트 노드 와 일치 하 는 템 플 릿

<xsl:template match=”/”>
</xsl:template>
2)xsl:for-each 순환 디 스 플레이 select="xpath expression"은 노드 의 변환(프로 그래 밍 언어 와 유사 한 foreach 구문)을 선택 합 니 다.다음 예제 에서 pets 아래 의 하위 요 소 를 선택 하 였 습 니 다.그리고 하위 요소 의 몇 가지 이름 을 반복 적 으로 표시 합 니 다.

<xsl:for-each select=”/pets/*”>
<xsl:value-of select=”name()”/>
</xsl:for-each>
3)xsl:if 요소 조건 표시 노드(프로 그래 밍 언어 와 유사 한 if 구문)는 번호 보다 작은 것 을 각각< 로 사용 해 야 합 니 다.와<대체

<xsl:if test=”@weight &lt; 10”>
<i>its weight is less than 10 km</i>
</xsl:if>
4)xsl:choose 다 중 분기 조건 표시(프로 그래 밍 언어 와 유사 한 switch 구문)

<xsl:choose >
 <xsl:when test=”name() = ‘pig'”>
<i>this is a pig</i>
 </xsl:when>
<xsl:otherwise>
  <i>this is not a pig</i>
</xsl:otherwise>
</xsl:choose>
5)xsl:value-of 는 선택 노드 나 속성의 값 을 표시 합 니 다.하위 노드 price선택 속성 weight6)xsl:attribute 구조 xml 노드 의 속성 은 노드 에 추가 합 니 다.속성,예 를 들 어7)xsl:apply-templates 응용 템 플 릿 xml 파일 구조 가 복잡 하면 여러 템 플 릿 을 정의 한 다음태그 응용 템 플 릿 을 사용 할 수 있 습 니 다.xsl:apply-templates 는 속성 select="xpath"를 지정 하여 응용 템 플 릿 을 선택 하거나 select 를 지정 하지 않 으 면 현재 노드 의 템 플 릿 을 선택 할 수 있 습 니 다.다음 예제 xslt 파일 pets-templates.xsl 의 완전한 예제 xsl 파일 을 보 세 요:pets.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>lovely pets</title>
        <style type="text/css">
          ul{margin:10px 0 10px 0;padding:0;width:400px;text-align:left;}
          li{height:60px;display:block;list-style:none;padding:4px;border:1px solid #f0f0f0;margin:5px;}
        </style>
      </head>
      <body>
        <center>
        <h1>lovely pets</h1>
        <ul>
          <xsl:for-each select="pets/*">
            <li>
              <img align="right">
                <xsl:choose>
                  <xsl:when test="name() = 'dog'">
                    <xsl:attribute name="src">http://estar-tv.com/images/comprofiler/gallery/dog.gif</xsl:attribute>
                  </xsl:when>
                  <xsl:when test="name() = 'pig'">
                    <xsl:attribute name="src">http://www.icosky.com/icon/thumbnails/Animal/Farm/Pig%20Icon.jpg</xsl:attribute>
                  </xsl:when>
                  <xsl:otherwise>
                    <xsl:attribute name="src">http://farm1.static.flickr.com/14/buddyicons/[email protected]?1143660418</xsl:attribute>
                  </xsl:otherwise>
                </xsl:choose>
              </img>
              <font>
                <xsl:attribute name="face">Courier</xsl:attribute>
                <xsl:attribute name="color">
                  <xsl:value-of select="@color"/>
                </xsl:attribute>
                <xsl:value-of select="name()"/>
              </font> said: "<xsl:value-of select="desc"/>"
              weight:<xsl:value-of select="@weight"/>

              <xsl:if test="@weight < 10">
                <p>
                  <i>its weight is less than 10 km</i>
                </p>
              </xsl:if>

 
            </li>
          </xsl:for-each>
        </ul>
        </center>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
의 전체 예제 파일 pets-templates.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>lovely pets</title>
        <style type="text/css">
          ul{margin:10px 0 10px 0;padding:0;width:400px;text-align:left;}
          li{height:60px;display:block;list-style:none;padding:4px;border:1px solid #f0f0f0;margin:5px;}
        </style>
      </head>
      <body>
        <center>
          <h1>lovely pets</h1>
          <ul>
            <xsl:apply-templates select="pets" />
          </ul>
        </center>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="pets">  
    <xsl:apply-templates select="dog"></xsl:apply-templates>
    <xsl:apply-templates select="pig"></xsl:apply-templates>
    <xsl:apply-templates select="cat"></xsl:apply-templates>
  </xsl:template>

  <xsl:template match="dog">
    <xsl:for-each select=".">
      <li>
        <img align="right">
          <xsl:attribute name="src">http://estar-tv.com/images/comprofiler/gallery/dog.gif</xsl:attribute>        
        </img>
        <font>
          <xsl:attribute name="face">Courier</xsl:attribute>
          <xsl:attribute name="color">
            <xsl:value-of select="@color"/>
          </xsl:attribute>
          dog
        </font> said: "<xsl:value-of select="desc"/>"
        weight:<xsl:value-of select="@weight"/>

        <xsl:if test="@weight < 10">
          <p>
            <i>its weight is less than 10 km</i>
          </p>
        </xsl:if>
      </li>
    </xsl:for-each>
  </xsl:template>

 

  <xsl:template match="pig">
    <xsl:for-each select=".">
      <li>
        <img align="right">
          <xsl:attribute name="src">http://www.icosky.com/icon/thumbnails/Animal/Farm/Pig%20Icon.jpg</xsl:attribute>
        </img>
        <font>
          <xsl:attribute name="face">Courier</xsl:attribute>
          <xsl:attribute name="color">
            <xsl:value-of select="@color"/>
          </xsl:attribute>
          pig
        </font> said: "<xsl:value-of select="desc"/>"
        weight:<xsl:value-of select="@weight"/>

        <xsl:if test="@weight < 10">
          <p>
            <i>its weight is less than 10 km</i>
          </p>
        </xsl:if>
      </li>
    </xsl:for-each>
  </xsl:template>

 
  <xsl:template match="cat">
    <xsl:for-each select=".">
      <li>
        <img align="right">
          <xsl:attribute name="src">http://farm1.static.flickr.com/14/buddyicons/[email protected]?1143660418</xsl:attribute>
        </img>
        <font>
          <xsl:attribute name="face">Courier</xsl:attribute>
          <xsl:attribute name="color">
            <xsl:value-of select="@color"/>
          </xsl:attribute>
          cat
        </font> said: "<xsl:value-of select="desc"/>"
        weight:<xsl:value-of select="@weight"/>

        <xsl:if test="@weight < 10">
          <p>
            <i>its weight is less than 10 km</i>
          </p>
        </xsl:if>
      </li>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>
c\#.net 에서 xsl Compiled Transform 을 사용 하여 xml 문 서 를 변환 할 수 있 습 니 다.xsl Transform 도 사용 할 수 있 습 니 다.그러나 이 종 류 는 마이크로소프트 에 의 해 시간 이 지 났 으 니 더 이상 사용 하지 않 는 것 이 좋 습 니 다.다음 코드 예제:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;

namespace UseXslt
{
    class Program
    {
        static void Main(string[] args)
        {
            // XslTransform
            System.Xml.Xsl.XslCompiledTransform trans = new System.Xml.Xsl.XslCompiledTransform();

            string xsltFile = @"X:\about.net\System.Xml\example\pets.xsl";
            using (StreamReader rdr = new StreamReader(xsltFile))
            {
                using (XmlReader xmlRdr = XmlReader.Create(rdr))
                {
                    // xsl
                    trans.Load(xmlRdr);
                }
            }
            string inputFile = @"X:\about.net\System.Xml\example\pets.xml";
            string outputFile = @"X:\about.net\System.Xml\example\pets-out.htm";
            // outputFile
            trans.Transform(inputFile, outputFile);
        }
    }
}
한 가지 주의 할 점 이 있 습 니 다.XslCompiled Transform 으로 변 환 된 파일 은 html 형식 입 니 다.이 종 류 는 html 헤드 탭 에 닫 히 지 않 은 meta 태그;마이크로소프트 가 우 리 를 도와 생각 하 는 것 이 너무 많다.Xslt 는 또한 매개 변 수 를 지정 하고 변 수 를 정의 할 수 있 습 니 다.이러한 부분 에 대해 서 는 관련 문 서 를 보십시오.

좋은 웹페이지 즐겨찾기