Changeset 206
- Timestamp:
- 02/03/07 01:10:51 (1 year ago)
- Files:
-
- trunk/experiments/general/xsl/main_home.xml (modified) (1 diff)
- trunk/experiments/general/xsl/parts.xml (modified) (1 diff)
- trunk/experiments/general/xsl/parts2.xml (modified) (1 diff)
- trunk/experiments/general/xsl/stub.xsl (modified) (3 diffs)
- trunk/src/main/php/net/stubbles/xml/stubXMLXIncludeStreamWrapper.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/experiments/general/xsl/main_home.xml
r205 r206 7 7 <stub:link page="testlinkPage">Das ist ein Stubbles-Link</stub:link> 8 8 <stub:include href="parts.xml" part="frank"/> 9 <stub:include href="parts.xml" part="schst"/> 9 10 <stub:comment>Das ist ein Kommentar</stub:comment> 10 11 <stub:script> trunk/experiments/general/xsl/parts.xml
r205 r206 9 9 Nico Steiner 10 10 </part> 11 <part name="schst"> 12 Stephan Schmidt 13 </part> 11 14 </parts> trunk/experiments/general/xsl/parts2.xml
r203 r206 2 2 <parts 3 3 xmlns:stub="http://stubbles.org/stub" 4 exclude-result-prefixes="stub">5 <part name="frank">6 <lang id="default">7 Frank Kleine8 </lang>9 </part>10 <part name="nico">11 <lang id="default">12 Nico Steiner13 </lang>14 </part>4 exclude-result-prefixes="stub"> 5 <part name="frank"> 6 <lang id="default"> 7 Frank Kleine 8 </lang> 9 </part> 10 <part name="nico"> 11 <lang id="default"> 12 <stub:include href="parts.xml" part="nico"/> 13 </lang> 14 </part> 15 15 </parts> trunk/experiments/general/xsl/stub.xsl
r205 r206 16 16 <xsl:template match="stub:script"> 17 17 <script type="text/javascript"><xsl:copy-of select="@*"/> 18 <xsl:comment><xsl:copy-of select="node()"/>//</xsl:comment>18 <xsl:comment><xsl:copy-of select="node()"/>//</xsl:comment> 19 19 </script> 20 </xsl:template> 21 22 <xsl:template match="stub:error"> 23 <div class="stubTransformError"> 24 <xsl:copy-of select="node()"/> 25 </div> 20 26 </xsl:template> 21 27 … … 86 92 <xsl:param name="href" select="@href"/> 87 93 <xsl:param name="part" select="@part"/> 88 <xi:include href="xinc://{$href} #xpointer(/parts/part[@name='{$part}']/node())">94 <xi:include href="xinc://{$href}?part={$part}#xpointer(/parts/part[@name='{$part}']/node())"> 89 95 <xi:fallback> 90 96 ERROR: Could not include part <xsl:value-of select="$part"/> in file <xsl:value-of select="$href"/> … … 117 123 <xsl:otherwise> 118 124 <small> 119 <xsl:text>[ No content for </xsl:text>120 <xsl:value-of select="$lang"/>121 <xsl:text> - specify at least language default ]</xsl:text>125 <xsl:text>[ No content for </xsl:text> 126 <xsl:value-of select="$lang"/> 127 <xsl:text> - specify at least language default ]</xsl:text> 122 128 </small> 123 129 </xsl:otherwise> trunk/src/main/php/net/stubbles/xml/stubXMLXIncludeStreamWrapper.php
r204 r206 47 47 protected $cachedFileName; 48 48 /** 49 * x pointer to retrieve only a part of the file50 * 51 * @var string 52 */ 53 protected $ xPointer;49 * the part that will be included 50 * 51 * @var string 52 */ 53 protected $part; 54 54 /** 55 55 * current file pointer … … 127 127 protected function processFile() 128 128 { 129 $previousErrorHandling = libxml_use_internal_errors(true); 129 130 $xslProcessor = clone self::$xslProcessor; 130 131 $xslProcessor->setXMLDocument(DOMDocument::load($this->fileName)); 131 132 $resultDoc = $xslProcessor->transformToDoc(); 133 // we save first to prevent a infinite loop in case of recursions 134 $resultDoc->save($this->cachedFileName); 132 135 $resultDoc->xinclude(); 136 $errors = libxml_get_errors(); 137 if (count($errors) > 0) { 138 unlink($this->cachedFileName); 139 libxml_clear_errors(); 140 foreach ($errors as $error) { 141 switch ($error->level) { 142 case LIBXML_ERR_WARNING: 143 $element = $resultDoc->createElement('stub:error', 'Warning: ' . trim($error->message) . (($error->file) ? (' in file ' . $error->file) : ('')) . ' on line ' . $error->line . ' in column ' . $error->column); 144 $element->setAttribute('stub:errorType', 'warning'); 145 if (null != $this->part && strlen($this->part) > 0) { 146 $xpath = new DOMXPath($resultDoc); 147 $entry = $xpath->query("/parts/part[@name='" . $this->part ."']/node()")->item(0); 148 $entry->appendChild($element); 149 } else { 150 $resultDoc->documentElement->appendChild($element); 151 } 152 break; 153 case LIBXML_ERR_ERROR: 154 $element = $resultDoc->createElement('stub:error', 'Error: ' . trim($error->message) . (($error->file) ? (' in file ' . $error->file) : ('')) . ' on line ' . $error->line . ' in column ' . $error->column); 155 $element->setAttribute('stub:errorType', 'error'); 156 if (null != $this->part && strlen($this->part) > 0) { 157 $xpath = new DOMXPath($resultDoc); 158 $entry = $xpath->query("/parts/part[@name='" . $this->part ."']")->item(0); 159 $entry->appendChild($element); 160 } else { 161 $resultDoc->documentElement->appendChild($element); 162 } 163 break; 164 case LIBXML_ERR_FATAL: 165 throw new stubXMLException('Fatal error: ' . trim($error->message) . (($error->file) ? (' in file ' . $error->file) : ('')) . ' on line ' . $error->line . ' in column ' . $error->column); 166 } 167 } 168 } 169 133 170 $resultDoc->save($this->cachedFileName); 171 libxml_use_internal_errors($previousErrorHandling); 134 172 } 135 173 … … 191 229 protected function parsePath($path) 192 230 { 193 list($fileName, $ xPointer) = sscanf($path, 'xinc://%[^#]#xpointer(%[^)]');194 $this->fileName = $fileName;195 $this->cachedFileName = self::$cachePath . '/xml/' . $fileName;196 $this-> xPointer = $xPointer;231 list($fileName, $part) = sscanf($path, 'xinc://%[^?]?part=%[^$]'); 232 $this->fileName = $fileName; 233 $this->cachedFileName = self::$cachePath . '/xml/' . $fileName; 234 $this->part = $part; 197 235 } 198 236 }
