Heim  >  Artikel  >  Backend-Entwicklung  >  Kurze Analyse von XPath-String-Funktionen und XSLT mit Beispielen

Kurze Analyse von XPath-String-Funktionen und XSLT mit Beispielen

黄舟
黄舟Original
2017-03-01 16:53:372136Durchsuche

XPath (XML Path Language) ist eine Sprache zur Verarbeitung von XML-Dokumentsegmenten. XSLT (Extensible Stylesheet Language Transformations, Extensible Stylesheet Language Transformations) verwendet XPath zur Beschreibung von Ausdrücken und Adresspfaden zur Steuerung der Knotenauswahl. XSLT kann XML in verschiedene Formate wie HTML oder andere Formate konvertieren.
Im Folgenden wird die XPath-String-Funktion anhand eines Seriendruckprogramms kurz erläutert. Die folgende XML-Datei enthält Daten und die XSLT-Datei enthält die Definition des E-Mail-Formats. MSXML4.0 wendet Stylesheets auf XML-Dokumente an, um ein zusammengeführtes E-Mail-Textdokument zu erstellen.
XML-Datei 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-Stylesheet-Dokument 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>

Das obige Stylesheet veranschaulicht die Verkettung und beginnt mit dem Hinzufügen neuer Zeilen zum Ausgabetext. und Variablen definieren und verwenden.
Das Folgende ist das Ausführungsergebnis des Programms.

1.VC6 erstellt eine Win32-Konsolenanwendung.
2. Fügen Sie den folgenden Code zu stdafx.h hinzu:

#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. Der obige Code führt die MSXML4-Typbibliothek ein, enthält die MSXML-Headerdatei, überprüft den HRESULT-Wert und deklariert einige globale Variablen.
4.Hauptfunktion:

  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-Datei- und XSLT-Stylesheet-Dateinamen werden als Befehlszeilenparameter an die Anwendung übergeben. Die Hauptfunktion überprüft, ob MSXML4.0 installiert ist, indem sie isMSXMLInstalled aufruft. Die nächsten beiden Aufrufe von „loadDocument“ dienen dazu, zuerst das XML-Dokument und dann das XSLT-Stylesheet zu laden. Rufen Sie abschließend transformNode zur Konvertierung auf.

6. Laden Sie den Code für dieses Beispiel herunter: http://www.perfectxml.com/CPPMSXML/downloads/20020716MailMerge.zip

Das Obige ist eine kurze Analyse Informationen zur XPath-String-Funktion mit Beispielen und XSLT-Inhalten finden Sie auf der chinesischen PHP-Website (www.php.cn), um weitere verwandte Inhalte zu erhalten!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn