Mercurial > hg > mpdl-group
comparison software/eXist/webapp/mpdl/presentation/insertExternalElements.xsl @ 9:1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 22 Feb 2011 16:03:45 +0100 |
parents | |
children | 469d927b9ca7 |
comparison
equal
deleted
inserted
replaced
8:d2a1c14fde31 | 9:1ec29fdd0db8 |
---|---|
1 <?xml version="1.0"?> | |
2 <xsl:stylesheet version="2.0" | |
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
4 xmlns:xs="http://www.w3.org/2001/XMLSchema" | |
5 xmlns:saxon="http://saxon.sf.net/" | |
6 xmlns:text="http://www.mpiwg-berlin.mpg.de/ns/mpdl/text" | |
7 xmlns:mpdlxmlutil="java:de.mpg.mpiwg.berlin.mpdl.util.XmlUtil" | |
8 > | |
9 | |
10 <xsl:output method="xml" encoding="utf-8"/> | |
11 <xsl:output name="myXml" indent="yes" omit-xml-declaration="yes"/> | |
12 | |
13 <xsl:variable name="externalElements" select="/result/externalElements"/> | |
14 <xsl:variable name="fragment" select="/result/fragment"/> | |
15 | |
16 <xsl:template match="result"> | |
17 <xsl:apply-templates/> | |
18 </xsl:template> | |
19 <xsl:template match="fragment"> | |
20 <xsl:apply-templates/> | |
21 </xsl:template> | |
22 <xsl:template match="externalElements"> | |
23 </xsl:template> | |
24 | |
25 <xsl:template match="attribute()|text()|comment()|processing-instruction()"> | |
26 <xsl:copy> | |
27 <xsl:apply-templates select="attribute()|element()|text()|comment()|processing-instruction()"/> | |
28 </xsl:copy> | |
29 </xsl:template> | |
30 | |
31 <xsl:template match="element()"> | |
32 <xsl:variable name="elemXmlNodeIdTmp" select="saxon:path(.)"/> | |
33 <xsl:variable name="elemXmlNodeId" select="concat('/', substring-after(substring-after(substring-after($elemXmlNodeIdTmp, '/'), '/'), '/'))"/> | |
34 <xsl:variable name="extElemXmlNodeIds" select="$externalElements//@xmlNodeId"/> | |
35 <xsl:variable name="extElemIndex" select="index-of($extElemXmlNodeIds, $elemXmlNodeId)"/> | |
36 <xsl:variable name="extElem" select="$externalElements/*[$extElemIndex]"/> | |
37 <xsl:variable name="extElemContent" select="$extElem/content/*[1]"/> | |
38 <xsl:variable name="extElemContentSerialized" select="saxon:serialize($extElemContent, 'myXml')"/> | |
39 <xsl:variable name="before"> | |
40 <xsl:choose> | |
41 <xsl:when test="empty($extElem/@before) or $extElem/@before = ''"> | |
42 <xsl:value-of select="''"/> | |
43 </xsl:when> | |
44 <xsl:otherwise> | |
45 <xsl:value-of select="string($extElem/@before)"/> | |
46 </xsl:otherwise> | |
47 </xsl:choose> | |
48 </xsl:variable> | |
49 <xsl:variable name="charPos"> | |
50 <xsl:choose> | |
51 <xsl:when test="empty($extElem/@charPos) or $extElem/@charPos = ''"> | |
52 <xsl:value-of select="xs:integer(-1)"/> | |
53 </xsl:when> | |
54 <xsl:otherwise> | |
55 <xsl:sequence select="xs:integer($extElem/@charPos)"/> | |
56 </xsl:otherwise> | |
57 </xsl:choose> | |
58 </xsl:variable> | |
59 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> | |
60 <xsl:variable name="insertedElemSerialized" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($charPos), $extElemContentSerialized)"/> | |
61 <xsl:variable name="insertedElemDeSerializedTmp" select="saxon:parse($insertedElemSerialized)"/> | |
62 <xsl:variable name="insertedElemDeSerialized"> | |
63 <xsl:element name="{name()}"> | |
64 <xsl:apply-templates select="attribute()"/> | |
65 <xsl:attribute name="xmlNodeId"> | |
66 <xsl:value-of select="$elemXmlNodeId"/> | |
67 </xsl:attribute> | |
68 <xsl:sequence select="$insertedElemDeSerializedTmp/*[1]/node()"/> | |
69 </xsl:element> | |
70 </xsl:variable> | |
71 <xsl:if test="$charPos < 0 and $before = 'true'"> | |
72 <xsl:sequence select="$extElemContent"/> | |
73 </xsl:if> | |
74 <xsl:if test="$charPos >= 0"> | |
75 <xsl:sequence select="$insertedElemDeSerialized"/> | |
76 </xsl:if> | |
77 <xsl:if test="$charPos < 0"> | |
78 <xsl:copy> | |
79 <xsl:apply-templates select="attribute()"/> | |
80 <xsl:attribute name="xmlNodeId"> | |
81 <xsl:value-of select="$elemXmlNodeId"/> | |
82 </xsl:attribute> | |
83 <xsl:apply-templates select="element()|text()|comment()|processing-instruction()"/> | |
84 </xsl:copy> | |
85 </xsl:if> | |
86 <xsl:if test="$charPos < 0 and $before = 'false'"> | |
87 <xsl:sequence select="$extElemContent"/> | |
88 </xsl:if> | |
89 </xsl:template> | |
90 | |
91 </xsl:stylesheet> |