Heim >Backend-Entwicklung >XML/RSS-Tutorial >Kurze Analyse von XPath-String-Funktionen und XSLT mit Beispielen
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='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>
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++'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!