다음을 통해 공유


변환 과정에서 XPathNodeIterator의 역할

업데이트: November 2007

XPathNodeIterator는 XPath(XML Path Language) 쿼리의 결과로 만들어진 노드 집합이나 노드 집합 메서드를 사용하여 노드 집합으로 변환된 결과 트리 조각을 반복하기 위한 메서드를 제공합니다. XPathNodeIterator를 사용하면 해당 노드 집합 내의 노드를 반복할 수 있습니다. 노드 집합을 검색한 후 XPathNodeIterator 클래스는 선택한 노드 집합에 대해 앞으로만 이동 가능한 읽기 전용 커서를 제공합니다. 노드 집합은 문서 순서에 따라 만들어지므로 이 메서드를 호출하면 문서 순서에서 다음 노드로 이동하게 됩니다. XPathNodeIterator는 집합에 속하는 모든 노드의 노드 트리를 빌드하지 않습니다. 대신 트리에서 이동하는 것을 나타내는 원본으로 사용하는 노드를 노출하는 데이터에 대한 단일 노드 창을 제공합니다. XPathNodeIterator 클래스에서 사용할 수 있는 메서드 및 속성을 통해 현재 노드에서 정보를 가져올 수 있습니다. 사용 가능한 메서드 및 속성 목록을 보려면 XPathNodeIterator 멤버를 참조하십시오.

XPathNodeIterator는 XPath 쿼리에서 만든 노드 집합에서 앞으로만 이동하기 때문에 이동 방법은 MoveNext 메서드를 사용하는 것입니다. 이 메서드의 반환 형식은 Boolean이며 선택된 다음 노드로 이동할 경우 true를, 더 이상 선택된 노드가 없는 경우에는 false를 반환합니다. 다음은 true가 반환되는 경우에 사용할 수 있는 속성 목록입니다.

노드 집합을 처음 확인하는 경우에는 MoveNext를 호출하여 XPathNodeIterator를 선택된 집합의 첫 번째 노드에 배치해야 합니다. 그러면 while 루프를 작성할 수 있습니다.

다음 코드 예제에서는 XPathNodeIteratorXsltArgumentList의 매개 변수로 XslTransform에 전달하는 방법을 보여 줍니다. 코드의 입력은 books.xml이고 스타일시트는 text.xsl입니다. 파일 test.xmlXPathDocument입니다.

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Xml.XPath
Imports System.Text

Public Class sample

   Public Shared Sub Main()
      Dim Doc As New XPathDocument("books.xml")
      Dim nav As XPathNavigator = Doc.CreateNavigator()
      Dim Iterator As XPathNodeIterator = nav.Select("/bookstore/book")

      Dim arg As New XsltArgumentList()
      arg.AddParam("param1", "", Iterator)

      Dim xslt As New XslTransform()
      xslt.Load("test.xsl")

      Dim xd As New XPathDocument("test.xml")

      Dim strmTemp = New FileStream("out.xml", FileMode.Create, FileAccess.ReadWrite)
      xslt.Transform(xd, arg, strmTemp, Nothing)
   End Sub 'Main
End Class 'sample
using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.Text;

public class sample
{
    public static void Main()
    {
        XPathDocument Doc = new XPathDocument("books.xml");
        XPathNavigator nav = Doc.CreateNavigator();
        XPathNodeIterator Iterator = nav.Select("/bookstore/book");

        XsltArgumentList arg = new XsltArgumentList();
        arg.AddParam("param1", "", Iterator);

        XslTransform xslt = new XslTransform();
        xslt.Load("test.xsl");

        XPathDocument xd = new XPathDocument("test.xml");

        Stream strmTemp = new FileStream("out.xml", FileMode.Create, FileAccess.ReadWrite);
        xslt.Transform(xd, arg, strmTemp, null);
    }
}

books.xml

<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database. -->
<bookstore specialty="novel">
    <book style="autobiography">
    <title>Seven Years in Trenton</title>
        <author>
            <first-name>Jay</first-name>
            <last-name>Adams</last-name>
            <award>Trenton Literary Review Honorable Mention</award>
            <country>USA</country>
        </author>
        <price>12</price>
    </book>
    <book style="textbook">
        <title>History of Trenton</title>
        <author>
            <first-name>Kim</first-name>
            <last-name>Akers</last-name>
            <publication>
                Selected Short Stories of
                <first-name>Scott</first-name>
                <last-name>Bishop</last-name>
                <country>US</country>
            </publication>
        </author>
        <price>55</price>
    </book>
</bookstore>

test.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">

<xsl:output method="xml" indent="yes"/>
<xsl:param name="param1"/>

<xsl:template match="/">
    <out>
        <xsl:for-each select="$param1/title">
            <title><xsl:value-of select="."/></title>
        </xsl:for-each>
    </out>
</xsl:template>

</xsl:stylesheet>

test.xml

<Title attr="Test">this is a test</Title>

출력(out.xml)

<?xml version="1.0" encoding="utf-8"?>
<out>
  <title>Seven Years in Trenton</title>
  <title>History of Trenton</title>
</out>

참고 항목

개념

XslTransform 클래스의 XSLT 프로세서 구현