XPath (xml Path Language) est un langage de traitement des segments de documents XML. XSLT (Extensible Stylesheet Language Transformations, Extensible Stylesheet Language Transformations) utilise XPath pour décrire les expressions et les chemins d'adresse afin de contrôler la sélection des nœuds. XSLT peut convertir XML en divers formats tels que HTML ou d'autres formats.
Ce qui suit utilise un programme de publipostage pour expliquer brièvement la fonction de chaîne XPath. Le fichier XML suivant contient des données et le fichier XSLT contient la définition du format d'e-mail. MSXML4.0 applique des feuilles de style aux documents XML pour produire un document texte de courrier électronique fusionné.
Fichier 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>
Document de feuille de style 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>
La feuille de style ci-dessus illustre la concat et commence par Ajouter de nouvelles lignes au texte de sortie, et définir et utiliser des variables.
Ce qui suit est le résultat de l'exécution du programme.
1.VC6 crée une application console Win32.
2. Ajoutez le code suivant à 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. Le code ci-dessus introduit la bibliothèque de types MSXML4, contient le fichier d'en-tête MSXML, vérifie la valeur HRESULT et déclare certaines variables globales.
Fonction 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.Les noms de fichiers XML et de feuilles de style XSLT sont transmis à l'application en tant que paramètres de ligne de commande. La fonction principale vérifie si MSXML4.0 est installé en appelant isMSXMLInstalled. Les deux appels suivants à loadDocument consistent d'abord à charger le document XML, puis à charger la feuille de style XSLT. Enfin, appelez transformNode pour la conversion.
6. Téléchargez le code de cet exemple : http://www.perfectxml.com/CPPMSXML/downloads/20020716MailMerge.zip
Ce qui précède est une brève analyse de la fonction de chaîne XPath avec des exemples et du contenu XSLT, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) pour plus de contenu connexe !