实例简析XPath串函数和XSLT

2016-02-19 21:42 9 1 收藏

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

【 tulaoshi.com - Web开发 】

  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

    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

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

  #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).

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

  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

来源:http://www.tulaoshi.com/n/20160219/1626910.html

延伸阅读
标签: 电脑入门
一、Windows8网络和共享中心的打开方式 l在系统托盘中打开 右击传统桌面右下侧网络图标,单击打开网络和共享中心即可。 需要注意的是,图中的网络图标为已连接到无线网络模式的图标,根据网络连接方式的不同,另外还有类似计算机样式的网络图标等几种不同的网络图标样式,可以多尝试一下。 l在控制面板中打开网络和共享中心 第一步:打...
风光摄影拍摄思路简析 了解自然光 要弄清楚阳光是如何落到景物上,又如何被景物表面反射和吸收,这需要不断实践和摸索。精通用光并不意味着我们要去控制光,而是要学会如何发挥光的作用,最有效地使用光。拍摄时应该全面分析光线以及它在整个拍摄场景中的分布,这一点必须牢记在心。――查理?韦特 对拍摄地的体验和理解...
析构函数的奥秘 作者:王咏武 提交者:eastvc 发布日期:2003-7-12 20:02:45 原文出处:http://www.contextfree.net/wangyw/deconstr.htm 请看如下一段代码: class A { public: A () { pValue = new int[100]; printf("Constructor of A\n"); } ~A () { delete [] pValue; printf("Deconstructor of A\n"); } priv...
代码如下: #includeiostream class base{ public:     base()     {         std::coutstd::endl;         std::cout"base constructor"std::endl;         func1();     &...
标签: Web开发
2. XSLT的实例 2.1 XSLT如何转换XML 2.2 一个实例 2.3 过程解析 2.4 XSLT的用途 2.1 XSLT如何转换XML 我们打个有趣的比方,你玩过橡皮泥吧,用不同的模子按上去,就可以做出需要的形状。如果我们假设XML数据文档是一块大橡皮泥,XSLT就象是一个模子,用力一按,就做出需要的形状来---符合不同需要的HTML文档。 我们将XML原文档输入,...

经验教程

325

收藏

98
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部