2016-11-10 4 views
0

Ich habe Schwierigkeiten mit der Sammlung() Funktion in Saxon. Ich möchte einen Textbericht erstellen, der auf allen XML-Dateien in einem Verzeichnis basiert. Ich habe eine benannte Vorlage erstellt, die ich über die Befehlszeile an das Stylesheet übergebe. Ich kann eine Textdatei mit Kopfzeilen ausgeben, aber es scheint, dass die XPATH-Ausdrücke die einzelnen Elemente nicht aufnehmen. HierXPATH Ausdrücke und Saxon collection() Funktion

ist die XML:

<?xml version='1.0'?> 
<document form='Submission'> 
    <item name='FiscalYear'><text>2012</text></item> 
    <item name='RequestType'><text>General</text></item> 
    <item name='LeadMinistry'><text>Ministry of Truth</text></item> 
    <item name='MinRef'><text>67890</text></item> 
    <item name='LogNo'><text>12345</text></item> 
    <item name='Division'><text>IFSB</text></item> 
    <item name='Branch'><text>MEI</text></item> 
</document> 

Hier ist die XSLT ist:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" omit-xml-declaration="yes" indent="no"/> 
    <xsl:variable name="newline"> 
     <xsl:text> 
</xsl:text> 
    </xsl:variable> 
    <xsl:param name="input-dir" select="'file:///C:\path\to\XML\input\files\'"/> 
    <xsl:template name="main"> 
     <xsl:variable name="input-docs" select="collection(iri-to-uri(concat($input-dir, '?select=*.xml')))"/> 
     <xsl:value-of select="'LogNo|MinRef|FiscalYear|RequestType|Division|Branch|LeadMinistry'"/> 
     <xsl:value-of select="$newline"/> 
     <xsl:for-each select="$input-docs/document[@form = 'Submission']"> 
      <xsl:value-of select="concat(item[@name = 'LogNo']/text, '| ')"/> 
      <xsl:value-of select="concat(item[@name = 'MinRef']/text, '| ')"/> 
      <xsl:value-of select="concat(item[@name = 'FiscalYear']/text, '| ')"/> 
      <xsl:value-of select="concat(item[@name = 'RequestType']/text, '| ')"/> 
      <xsl:value-of select="concat(item[@name = 'Division']/text, '| ')"/> 
      <xsl:value-of select="concat(item[@name = 'Branch']/text, '| ')"/> 
      <xsl:value-of select="concat(item[@name = 'LeadMinistry']/text, '| ')"/> 
      <xsl:value-of select="$newline"/> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

Antwort

0

Ein URI nutzt alle Vorwärts-Schrägstriche so file:///C:\path\to\XML\input\files\-file:///C:/path/to/XML/input/files ändern.

+0

Ich habe die Schrägstriche zu Schrägstrichen geändert, aber es funktioniert immer noch nicht. Ich glaube nicht, dass Schrägstriche das Problem sind - ich habe dieses XSLT tatsächlich auf einem ähnlichen basiert, das ich vor einigen Jahren geschrieben habe, und in diesem hatte ich Vorwärts- und Rückwärtsstriche gemischt. – b00kgrrl

+0

Ich habe einen Fehler im Verzeichnispfad gefunden, aber danke, dass Sie auf die gemischten Schrägstriche hingewiesen haben. – b00kgrrl