XPath(xml Path 언어)는 XML 문서 세그먼트를 처리하는 언어입니다. XSLT(Extensible Stylesheet Language Transformations, Extensible Stylesheet Language Transformations)는 XPath를 사용하여 노드 선택을 제어하기 위한 표현식과 주소 경로를 설명합니다. XSLT는 XML을 HTML이나 기타 형식과 같은 다양한 형식으로 변환할 수 있습니다.
다음은 메일 병합 프로그램을 사용하여 XPath 문자열 기능을 간략하게 설명합니다. 다음 XML 파일에는 데이터가 포함되어 있으며 XSLT 파일에는 이메일 형식의 정의가 포함되어 있습니다. MSXML4.0은 XML 문서에 스타일시트를 적용하여 병합된 전자 메일 텍스트 문서를 생성합니다.
XML 파일 Letter.xml
<?xml version="1.0" encoding="UTF-8"?> <Letter> <Date>July 17, 2002</Date> <To> <FirstName>Vicky</FirstName> <LastName>P</LastName> <Sex>Male</Sex> </To> <Address> <Line1>900 National Pkwy</Line1> <Line2>Suite 105</Line2> <City>Bellevue</City> <State>WA</State> <Zip>98007</Zip> <Country>USA</Country> </Address> <Subject>ESTATE OF JOHN DOE / FILE NO. 12345.6789</Subject> <Text> Please pay the PRoperty taxes as soon as possible. </Text> <Sender> <FirstName>John</FirstName> <LastName>M</LastName> <Title>Sr. Tax Consultant</Title> </Sender> </Letter>
XSLT 스타일시트 문서 Letter.xsl
<?xml version='1.0' encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="yes"/> <xsl:variable name="NL" select="'
'" /> <xsl:variable name="Para" select="concat($NL, $NL)" /> <xsl:template match="/"> <xsl:value-of select="//Date" /> <xsl:value-of select="$Para" /> To, <xsl:value-of select="concat(//To/FirstName, ' ', //To/LastName)" /> <xsl:value-of select="$NL" /> <xsl:value-of select="//Address/Line1" /> <xsl:value-of select="$NL" /> <xsl:value-of select="//Address/Line2" /> <xsl:value-of select="$NL" /> <xsl:value-of select="concat(//Address/City, ' ', //Address/State, ' ', //Address/Zip)" /> <xsl:value-of select="$NL" /> <xsl:value-of select="//Address/Country" /> <xsl:value-of select="$Para" /> Regarding: <xsl:value-of select="//Subject" /> <xsl:value-of select="$NL" /> Dear <xsl:if test="starts-with(//Sex, 'M')">Mr. </xsl:if><xsl:if test="starts-with(//Sex, 'F')">Miss </xsl:if> <xsl:value-of select="concat(//To/FirstName, ' ', //To/LastName)" />, <xsl:value-of select="$Para" /> <xsl:value-of select="//Text" /> <xsl:value-of select="$Para" /> Sincerely, <xsl:value-of select="$Para" /> <xsl:value-of select="concat(//Sender/FirstName, ' ', //Sender/LastName)" /> <xsl:value-of select="$NL" /> <xsl:value-of select="//Sender/Title" /> </xsl:template> </xsl:stylesheet>
위 스타일시트는 연결 및 시작을 보여줍니다. 새 줄을 추가하고 변수를 정의하고 사용합니다.
다음은 프로그램 실행 결과입니다.
1.VC6은 Win32 콘솔 애플리케이션을 생성합니다.
2. stdafx.h에 다음 코드를 추가합니다.
#include <TCHAR.H> #include <stdio.h> #include <time.h> #import "msxml4.dll" // If this import statement fails, you need to install MSXML 4.0 SP1 from: //http://msdn.microsoft.com/downloads/sample.asp?url=/MSDN-FILES/027/001/766/msdncompositedoc.xml #include <msxml2.h> // If this include statement fails, you need to install MSXML 4.0 SP1 SDK from: //http://msdn.microsoft.com/downloads/sample.asp?url=/MSDN-FILES/027/001/766/msdncompositedoc.xml // You also need to add the include file and library search path // to Visual C++'s list of directories (Tools > Options... > Directories). using namespace MSXML2; inline void EVAL_HR( HRESULT _hr ) { if FAILED(_hr) throw(_hr); } #define TEMP_SIZE _MAX_PATH // size of short buffer static _TCHAR szTemp[TEMP_SIZE]; // multipurpose buffer on stack static DWord dwLen;
3. 위 코드는 MSXML4 유형 라이브러리를 도입하고 MSXML 헤더 파일을 포함하며 HRESULT 값을 확인하고 일부 전역 변수를 선언합니다.
4.main 함수:
int main(int argc, char* argv[]) { try { EVAL_HR(CoInitialize(NULL)); // Make sure that MSXML 4.0 is installed if (!isMSXMLInstalled()) return -1; // Make sure that XML and XSL file names are passed // as command line parameters if (argc < 3) // Show proper message here return -1; IXMLDOMDocument2Ptr pXMLDoc = NULL; IXMLDOMDocument2Ptr pXSLDoc = NULL; // Load the XML document if (loadDocument(pXMLDoc, argv[1], true)) { // Load the stylesheet if (loadDocument(pXSLDoc, argv[2], false)) { _ftprintf(stdout, pXMLDoc->transformNode(pXSLDoc)); } else { printMSXMLError(pXSLDoc); } } else { printMSXMLError(pXMLDoc); } } catch(...) {//exception handling } _ftprintf(stdout, "\n\nPress Enter to continue..."); getchar(); CoUninitialize(); return 0; }
5.XML 파일 및 XSLT 스타일시트 파일 이름이 명령줄 매개변수로 애플리케이션에 전달됩니다. 기본 함수는 isMSXMLInstalled를 호출하여 MSXML4.0이 설치되었는지 확인합니다. loadDocument에 대한 다음 두 호출은 먼저 XML 문서를 로드한 다음 XSLT 스타일시트를 로드하는 것입니다. 마지막으로 변환을 위해 변환 노드를 호출합니다.
6. 이 예제의 코드를 다운로드하세요. http://www.perfectxml.com/CPPMSXML/downloads/20020716MailMerge.zip
위 내용은 간략한 분석입니다. 예제와 XSLT 콘텐츠가 포함된 XPath 문자열 함수에 대한 더 많은 관련 콘텐츠를 보려면 PHP 중국어 웹사이트(m.sbmmt.com)에 주목하세요!