>  기사  >  백엔드 개발  >  예제를 통해 XPath 문자열 함수 및 XSLT에 대한 간략한 분석

예제를 통해 XPath 문자열 함수 및 XSLT에 대한 간략한 분석

黄舟
黄舟원래의
2017-03-01 16:53:372091검색

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=&#39;1.0&#39; 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="&#39;&#xA;&#39;" />
<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, &#39; &#39;, //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, &#39; &#39;, //Address/State, &#39; &#39;, //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, &#39;M&#39;)">Mr. </xsl:if><xsl:if test="starts-with(//Sex, &#39;F&#39;)">Miss </xsl:if>
<xsl:value-of select="concat(//To/FirstName, &#39; &#39;, //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, &#39; &#39;, //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++&#39;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 중국어 웹사이트(www.php.cn)에 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.