diff options
Diffstat (limited to 'solr-8.1.1/example/example-DIH/solr/db/conf/xslt')
5 files changed, 672 insertions, 0 deletions
| diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example.xsl new file mode 100644 index 000000000..b89927008 --- /dev/null +++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example.xsl @@ -0,0 +1,132 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<!--  + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements.  See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License.  You may obtain a copy of the License at + * + *     http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + --> + +<!--  +  Simple transform of Solr query results to HTML + --> +<xsl:stylesheet version='1.0' +    xmlns:xsl='http://www.w3.org/1999/XSL/Transform' +> + +  <xsl:output media-type="text/html" encoding="UTF-8"/>  +   +  <xsl:variable name="title" select="concat('Solr search results (',response/result/@numFound,' documents)')"/> +   +  <xsl:template match='/'> +    <html> +      <head> +        <title><xsl:value-of select="$title"/></title> +        <xsl:call-template name="css"/> +      </head> +      <body> +        <h1><xsl:value-of select="$title"/></h1> +        <div class="note"> +          This has been formatted by the sample "example.xsl" transform - +          use your own XSLT to get a nicer page +        </div> +        <xsl:apply-templates select="response/result/doc"/> +      </body> +    </html> +  </xsl:template> +   +  <xsl:template match="doc"> +    <xsl:variable name="pos" select="position()"/> +    <div class="doc"> +      <table width="100%"> +        <xsl:apply-templates> +          <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param> +        </xsl:apply-templates> +      </table> +    </div> +  </xsl:template> + +  <xsl:template match="doc/*[@name='score']" priority="100"> +    <xsl:param name="pos"></xsl:param> +    <tr> +      <td class="name"> +        <xsl:value-of select="@name"/> +      </td> +      <td class="value"> +        <xsl:value-of select="."/> + +        <xsl:if test="boolean(//lst[@name='explain'])"> +          <xsl:element name="a"> +            <!-- can't allow whitespace here --> +            <xsl:attribute name="href">javascript:toggle("<xsl:value-of select="concat('exp-',$pos)" />");</xsl:attribute>?</xsl:element> +          <br/> +          <xsl:element name="div"> +            <xsl:attribute name="class">exp</xsl:attribute> +            <xsl:attribute name="id"> +              <xsl:value-of select="concat('exp-',$pos)" /> +            </xsl:attribute> +            <xsl:value-of select="//lst[@name='explain']/str[position()=$pos]"/> +          </xsl:element> +        </xsl:if> +      </td> +    </tr> +  </xsl:template> + +  <xsl:template match="doc/arr" priority="100"> +    <tr> +      <td class="name"> +        <xsl:value-of select="@name"/> +      </td> +      <td class="value"> +        <ul> +        <xsl:for-each select="*"> +          <li><xsl:value-of select="."/></li> +        </xsl:for-each> +        </ul> +      </td> +    </tr> +  </xsl:template> + + +  <xsl:template match="doc/*"> +    <tr> +      <td class="name"> +        <xsl:value-of select="@name"/> +      </td> +      <td class="value"> +        <xsl:value-of select="."/> +      </td> +    </tr> +  </xsl:template> + +  <xsl:template match="*"/> +   +  <xsl:template name="css"> +    <script> +      function toggle(id) { +        var obj = document.getElementById(id); +        obj.style.display = (obj.style.display != 'block') ? 'block' : 'none'; +      } +    </script> +    <style type="text/css"> +      body { font-family: "Lucida Grande", sans-serif } +      td.name { font-style: italic; font-size:80%; } +      td { vertical-align: top; } +      ul { margin: 0px; margin-left: 1em; padding: 0px; } +      .note { font-size:80%; } +      .doc { margin-top: 1em; border-top: solid grey 1px; } +      .exp { display: none; font-family: monospace; white-space: pre; } +    </style> +  </xsl:template> + +</xsl:stylesheet> diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_atom.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_atom.xsl new file mode 100644 index 000000000..b6c23151d --- /dev/null +++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_atom.xsl @@ -0,0 +1,67 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<!--  + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements.  See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License.  You may obtain a copy of the License at + * + *     http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + --> + +<!--  +  Simple transform of Solr query results to Atom + --> + +<xsl:stylesheet version='1.0' +    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> + +  <xsl:output +       method="xml" +       encoding="utf-8" +       media-type="application/xml" +  /> + +  <xsl:template match='/'> +    <xsl:variable name="query" select="response/lst[@name='responseHeader']/lst[@name='params']/str[@name='q']"/> +    <feed xmlns="http://www.w3.org/2005/Atom"> +      <title>Example Solr Atom 1.0 Feed</title> +      <subtitle> +       This has been formatted by the sample "example_atom.xsl" transform - +       use your own XSLT to get a nicer Atom feed. +      </subtitle> +      <author> +        <name>Apache Solr</name> +        <email>solr-user@lucene.apache.org</email> +      </author> +      <link rel="self" type="application/atom+xml"  +            href="http://localhost:8983/solr/q={$query}&wt=xslt&tr=atom.xsl"/> +      <updated> +        <xsl:value-of select="response/result/doc[position()=1]/date[@name='timestamp']"/> +      </updated> +      <id>tag:localhost,2007:example</id> +      <xsl:apply-templates select="response/result/doc"/> +    </feed> +  </xsl:template> +     +  <!-- search results xslt --> +  <xsl:template match="doc"> +    <xsl:variable name="id" select="str[@name='id']"/> +    <entry> +      <title><xsl:value-of select="str[@name='name']"/></title> +      <link href="http://localhost:8983/solr/select?q={$id}"/> +      <id>tag:localhost,2007:<xsl:value-of select="$id"/></id> +      <summary><xsl:value-of select="arr[@name='features']"/></summary> +      <updated><xsl:value-of select="date[@name='timestamp']"/></updated> +    </entry> +  </xsl:template> + +</xsl:stylesheet> diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_rss.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_rss.xsl new file mode 100644 index 000000000..c8ab5bfb1 --- /dev/null +++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/example_rss.xsl @@ -0,0 +1,66 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<!--  + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements.  See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License.  You may obtain a copy of the License at + * + *     http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + --> + +<!--  +  Simple transform of Solr query results to RSS + --> + +<xsl:stylesheet version='1.0' +    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> + +  <xsl:output +       method="xml" +       encoding="utf-8" +       media-type="application/xml" +  /> +  <xsl:template match='/'> +    <rss version="2.0"> +       <channel> +         <title>Example Solr RSS 2.0 Feed</title> +         <link>http://localhost:8983/solr</link> +         <description> +          This has been formatted by the sample "example_rss.xsl" transform - +          use your own XSLT to get a nicer RSS feed. +         </description> +         <language>en-us</language> +         <docs>http://localhost:8983/solr</docs> +         <xsl:apply-templates select="response/result/doc"/> +       </channel> +    </rss> +  </xsl:template> +   +  <!-- search results xslt --> +  <xsl:template match="doc"> +    <xsl:variable name="id" select="str[@name='id']"/> +    <xsl:variable name="timestamp" select="date[@name='timestamp']"/> +    <item> +      <title><xsl:value-of select="str[@name='name']"/></title> +      <link> +        http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/> +      </link> +      <description> +        <xsl:value-of select="arr[@name='features']"/> +      </description> +      <pubDate><xsl:value-of select="$timestamp"/></pubDate> +      <guid> +        http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/> +      </guid> +    </item> +  </xsl:template> +</xsl:stylesheet> diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/luke.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/luke.xsl new file mode 100644 index 000000000..05fb5bfee --- /dev/null +++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/luke.xsl @@ -0,0 +1,337 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +    Licensed to the Apache Software Foundation (ASF) under one or more +    contributor license agreements.  See the NOTICE file distributed with +    this work for additional information regarding copyright ownership. +    The ASF licenses this file to You under the Apache License, Version 2.0 +    (the "License"); you may not use this file except in compliance with +    the License.  You may obtain a copy of the License at +     +    http://www.apache.org/licenses/LICENSE-2.0 +     +    Unless required by applicable law or agreed to in writing, software +    distributed under the License is distributed on an "AS IS" BASIS, +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +    See the License for the specific language governing permissions and +    limitations under the License. +--> + + +<!--  +  Display the luke request handler with graphs + --> +<xsl:stylesheet +    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" +    xmlns="http://www.w3.org/1999/xhtml" +    version="1.0" +    > +    <xsl:output +        method="html" +        encoding="UTF-8" +        media-type="text/html" +        doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" +        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" +    /> + +    <xsl:variable name="title">Solr Luke Request Handler Response</xsl:variable> + +    <xsl:template match="/"> +        <html xmlns="http://www.w3.org/1999/xhtml"> +            <head> +                <link rel="stylesheet" type="text/css" href="solr-admin.css"/> +                <link rel="icon" href="favicon.ico" type="image/x-icon"/> +                <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/> +                <title> +                    <xsl:value-of select="$title"/> +                </title> +                <xsl:call-template name="css"/> + +            </head> +            <body> +                <h1> +                    <xsl:value-of select="$title"/> +                </h1> +                <div class="doc"> +                    <ul> +                        <xsl:if test="response/lst[@name='index']"> +                            <li> +                                <a href="#index">Index Statistics</a> +                            </li> +                        </xsl:if> +                        <xsl:if test="response/lst[@name='fields']"> +                            <li> +                                <a href="#fields">Field Statistics</a> +                                <ul> +                                    <xsl:for-each select="response/lst[@name='fields']/lst"> +                                        <li> +                                            <a href="#{@name}"> +                                                <xsl:value-of select="@name"/> +                                            </a> +                                        </li> +                                    </xsl:for-each> +                                </ul> +                            </li> +                        </xsl:if> +                        <xsl:if test="response/lst[@name='doc']"> +                            <li> +                                <a href="#doc">Document statistics</a> +                            </li> +                        </xsl:if> +                    </ul> +                </div> +                <xsl:if test="response/lst[@name='index']"> +                    <h2><a name="index"/>Index Statistics</h2> +                    <xsl:apply-templates select="response/lst[@name='index']"/> +                </xsl:if> +                <xsl:if test="response/lst[@name='fields']"> +                    <h2><a name="fields"/>Field Statistics</h2> +                    <xsl:apply-templates select="response/lst[@name='fields']"/> +                </xsl:if> +                <xsl:if test="response/lst[@name='doc']"> +                    <h2><a name="doc"/>Document statistics</h2> +                    <xsl:apply-templates select="response/lst[@name='doc']"/> +                </xsl:if> +            </body> +        </html> +    </xsl:template> + +    <xsl:template match="lst"> +        <xsl:if test="parent::lst"> +            <tr> +                <td colspan="2"> +                    <div class="doc"> +                        <xsl:call-template name="list"/> +                    </div> +                </td> +            </tr> +        </xsl:if> +        <xsl:if test="not(parent::lst)"> +            <div class="doc"> +                <xsl:call-template name="list"/> +            </div> +        </xsl:if> +    </xsl:template> + +    <xsl:template name="list"> +        <xsl:if test="count(child::*)>0"> +            <table> +                <thead> +                    <tr> +                        <th colspan="2"> +                            <p> +                                <a name="{@name}"/> +                            </p> +                            <xsl:value-of select="@name"/> +                        </th> +                    </tr> +                </thead> +                <tbody> +                    <xsl:choose> +                        <xsl:when +                            test="@name='histogram'"> +                            <tr> +                                <td colspan="2"> +                                    <xsl:call-template name="histogram"/> +                                </td> +                            </tr> +                        </xsl:when> +                        <xsl:otherwise> +                            <xsl:apply-templates/> +                        </xsl:otherwise> +                    </xsl:choose> +                </tbody> +            </table> +        </xsl:if> +    </xsl:template> + +    <xsl:template name="histogram"> +        <div class="doc"> +            <xsl:call-template name="barchart"> +                <xsl:with-param name="max_bar_width">50</xsl:with-param> +                <xsl:with-param name="iwidth">800</xsl:with-param> +                <xsl:with-param name="iheight">160</xsl:with-param> +                <xsl:with-param name="fill">blue</xsl:with-param> +            </xsl:call-template> +        </div> +    </xsl:template> + +    <xsl:template name="barchart"> +        <xsl:param name="max_bar_width"/> +        <xsl:param name="iwidth"/> +        <xsl:param name="iheight"/> +        <xsl:param name="fill"/> +        <xsl:variable name="max"> +            <xsl:for-each select="int"> +                <xsl:sort data-type="number" order="descending"/> +                <xsl:if test="position()=1"> +                    <xsl:value-of select="."/> +                </xsl:if> +            </xsl:for-each> +        </xsl:variable> +        <xsl:variable name="bars"> +           <xsl:value-of select="count(int)"/> +        </xsl:variable> +        <xsl:variable name="bar_width"> +           <xsl:choose> +             <xsl:when test="$max_bar_width < ($iwidth div $bars)"> +               <xsl:value-of select="$max_bar_width"/> +             </xsl:when> +             <xsl:otherwise> +               <xsl:value-of select="$iwidth div $bars"/> +             </xsl:otherwise> +           </xsl:choose> +        </xsl:variable> +        <table class="histogram"> +           <tbody> +              <tr> +                <xsl:for-each select="int"> +                   <td> +                 <xsl:value-of select="."/> +                 <div class="histogram"> +                  <xsl:attribute name="style">background-color: <xsl:value-of select="$fill"/>; width: <xsl:value-of select="$bar_width"/>px; height: <xsl:value-of select="($iheight*number(.)) div $max"/>px;</xsl:attribute> +                 </div> +                   </td>  +                </xsl:for-each> +              </tr> +              <tr> +                <xsl:for-each select="int"> +                   <td> +                       <xsl:value-of select="@name"/> +                   </td> +                </xsl:for-each> +              </tr> +           </tbody> +        </table> +    </xsl:template> + +    <xsl:template name="keyvalue"> +        <xsl:choose> +            <xsl:when test="@name"> +                <tr> +                    <td class="name"> +                        <xsl:value-of select="@name"/> +                    </td> +                    <td class="value"> +                        <xsl:value-of select="."/> +                    </td> +                </tr> +            </xsl:when> +            <xsl:otherwise> +                <xsl:value-of select="."/> +            </xsl:otherwise> +        </xsl:choose> +    </xsl:template> + +    <xsl:template match="int|bool|long|float|double|uuid|date"> +        <xsl:call-template name="keyvalue"/> +    </xsl:template> + +    <xsl:template match="arr"> +        <tr> +            <td class="name"> +                <xsl:value-of select="@name"/> +            </td> +            <td class="value"> +                <ul> +                    <xsl:for-each select="child::*"> +                        <li> +                            <xsl:apply-templates/> +                        </li> +                    </xsl:for-each> +                </ul> +            </td> +        </tr> +    </xsl:template> + +    <xsl:template match="str"> +        <xsl:choose> +            <xsl:when test="@name='schema' or @name='index' or @name='flags'"> +                <xsl:call-template name="schema"/> +            </xsl:when> +            <xsl:otherwise> +                <xsl:call-template name="keyvalue"/> +            </xsl:otherwise> +        </xsl:choose> +    </xsl:template> + +    <xsl:template name="schema"> +        <tr> +            <td class="name"> +                <xsl:value-of select="@name"/> +            </td> +            <td class="value"> +                <xsl:if test="contains(.,'unstored')"> +                    <xsl:value-of select="."/> +                </xsl:if> +                <xsl:if test="not(contains(.,'unstored'))"> +                    <xsl:call-template name="infochar2string"> +                        <xsl:with-param name="charList"> +                            <xsl:value-of select="."/> +                        </xsl:with-param> +                    </xsl:call-template> +                </xsl:if> +            </td> +        </tr> +    </xsl:template> + +    <xsl:template name="infochar2string"> +        <xsl:param name="i">1</xsl:param> +        <xsl:param name="charList"/> + +        <xsl:variable name="char"> +            <xsl:value-of select="substring($charList,$i,1)"/> +        </xsl:variable> +        <xsl:choose> +            <xsl:when test="$char='I'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='I']"/> - </xsl:when> +            <xsl:when test="$char='T'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='T']"/> - </xsl:when> +            <xsl:when test="$char='S'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='S']"/> - </xsl:when> +            <xsl:when test="$char='M'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='M']"/> - </xsl:when> +            <xsl:when test="$char='V'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='V']"/> - </xsl:when> +            <xsl:when test="$char='o'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='o']"/> - </xsl:when> +            <xsl:when test="$char='p'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='p']"/> - </xsl:when> +            <xsl:when test="$char='O'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='O']"/> - </xsl:when> +            <xsl:when test="$char='L'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='L']"/> - </xsl:when> +            <xsl:when test="$char='B'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='B']"/> - </xsl:when> +            <xsl:when test="$char='C'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='C']"/> - </xsl:when> +            <xsl:when test="$char='f'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='f']"/> - </xsl:when> +            <xsl:when test="$char='l'"> +                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='l']"/> - +            </xsl:when> +        </xsl:choose> + +        <xsl:if test="not($i>=string-length($charList))"> +            <xsl:call-template name="infochar2string"> +                <xsl:with-param name="i"> +                    <xsl:value-of select="$i+1"/> +                </xsl:with-param> +                <xsl:with-param name="charList"> +                    <xsl:value-of select="$charList"/> +                </xsl:with-param> +            </xsl:call-template> +        </xsl:if> +    </xsl:template> +    <xsl:template name="css"> +        <style type="text/css"> +            <![CDATA[ +            td.name {font-style: italic; font-size:80%; } +            .doc { margin: 0.5em; border: solid grey 1px; } +            .exp { display: none; font-family: monospace; white-space: pre; } +            div.histogram { background: none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;} +            table.histogram { width: auto; vertical-align: bottom; } +            table.histogram td, table.histogram th { text-align: center; vertical-align: bottom; border-bottom: 1px solid #ff9933; width: auto; } +            ]]> +        </style> +    </xsl:template> +</xsl:stylesheet> diff --git a/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/updateXml.xsl b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/updateXml.xsl new file mode 100644 index 000000000..7c4a48e73 --- /dev/null +++ b/solr-8.1.1/example/example-DIH/solr/db/conf/xslt/updateXml.xsl @@ -0,0 +1,70 @@ +<!--  + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements.  See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License.  You may obtain a copy of the License at + * + *     http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + --> + +<!-- +  Simple transform of Solr query response into Solr Update XML compliant XML. +  When used in the xslt response writer you will get UpdaateXML as output. +  But you can also store a query response XML to disk and feed this XML to +  the XSLTUpdateRequestHandler to index the content. Provided as example only. +  See http://wiki.apache.org/solr/XsltUpdateRequestHandler for more info + --> +<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> +  <xsl:output media-type="text/xml" method="xml" indent="yes"/> + +  <xsl:template match='/'> +    <add> +        <xsl:apply-templates select="response/result/doc"/> +    </add> +  </xsl:template> +   +  <!-- Ignore score (makes no sense to index) --> +  <xsl:template match="doc/*[@name='score']" priority="100"> +  </xsl:template> + +  <xsl:template match="doc"> +    <xsl:variable name="pos" select="position()"/> +    <doc> +        <xsl:apply-templates> +          <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param> +        </xsl:apply-templates> +    </doc> +  </xsl:template> + +  <!-- Flatten arrays to duplicate field lines --> +  <xsl:template match="doc/arr" priority="100"> +      <xsl:variable name="fn" select="@name"/> +       +      <xsl:for-each select="*"> +        <xsl:element name="field"> +            <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute> +              <xsl:value-of select="."/> +        </xsl:element> +      </xsl:for-each> +  </xsl:template> + + +  <xsl:template match="doc/*"> +      <xsl:variable name="fn" select="@name"/> + +       <xsl:element name="field"> +        <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute> +        <xsl:value-of select="."/> +       </xsl:element> +  </xsl:template> + +  <xsl:template match="*"/> +</xsl:stylesheet> | 
