实例简析XPath串函数和XSLT

行走在青藏高原

行走在青藏高原

2016-02-19 21:42

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的实例简析XPath串函数和XSLT,手机电脑控们准备好了吗?一起看过来吧!

  XPath(XML Path language)是一种处理XML文档段的语言。XSLT(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

    DateJuly 17, 2002/Date

    To
       FirstNameVicky/FirstName
       LastNameP/LastName
       SexMale/Sex
    /To

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

    Address
       Line1900 National Pkwy/Line1
       Line2Suite 105/Line2
       CityBellevue/City
       StateWA/State
       Zip98007/Zip
       CountryUSA/Country
    /Address

    SubjectESTATE OF JOHN DOE / FILE NO. 12345.6789/Subject

    Text
       Please pay the property taxes as soon as possible.
    /Text

    Sender
       FirstNameJohn/FirstName
       LastNameM/LastName
       TitleSr. 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:ifxsl: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
   
      上面的样式表举例说明了concat和starts-with XPath串函数和怎样在输出文本中增加新行,还有定义和使用变量。
      下面是程序的执行结果。
      

  
  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, "Press Enter to continue...");
   getchar();
   CoUninitialize();
   return 0;
  }

  5.XML文件和XSLT样式表文件名作为命令行参数传递给应用程序。主函数通过调用isMSXMLInstalled验证    MSXML4.0是否安装。接下来两次调用loadDocument;先是加载XML文档,然后是加载XSLT样式表。 最后调用transformNode进行转换。
  6.本例代码下载:http://www.perfectxml.com/CPPMSXML/downloads/20020716MailMerge.zip

  译自PerfectXML

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)
展开更多 50%)
分享

猜你喜欢

实例简析XPath串函数和XSLT

Web开发
实例简析XPath串函数和XSLT

java匿名内部类实例简析

编程语言 网络编程
java匿名内部类实例简析

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

简析Chrome和Webkit的渊源

浏览器
简析Chrome和Webkit的渊源

java thread start()和run()方法简析

编程语言 网络编程
java thread start()和run()方法简析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

第四节--构造函数和析构函数

Web开发
第四节--构造函数和析构函数

C#中构造函数和析构函数的用法

编程语言 网络编程
C#中构造函数和析构函数的用法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

VC树型控件拖动的完美实现

VC树型控件拖动的完美实现

文件不配合拒入回收站 寻因觅解法

文件不配合拒入回收站 寻因觅解法
下拉加载更多内容 ↓