如何从XSL Document进行SQL查询?

时间:2017-01-05 08:44:32

标签: mysql sql-server xml xslt

如何从XSLT文档中进行SQL查询。建议我如何在SQL查询中检索它。观点如何显示我不理解。如何从SQL查询中选择。 这是代码,它给出了错误。

数据集Xsl格式:

<xsl:stylesheet version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:i18n="http://toolkit.sf.net/i18n/messages" xmlns:ddi="http://www.icpsr.umich.edu/DDI" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:outline="http://worldbank.org/toolkit/cdrom/outline" exclude-result-prefixes="ddi outline">
    <xsl:include href="gettext.xslt"/>
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
    <!--file id -->
    <xsl:param name="file" select="'F5'"/>

 <xsl:template match="/">
        <div id="variable-list">
        <xsl:apply-templates select="//ddi:codeBook/ddi:fileDscr[@ID=$file]"/>
        <h2><xsl:call-template name="gettext"><xsl:with-param name="msg">Variables</xsl:with-param></xsl:call-template></h2>
        <table border="1" style="border-collapse:collapse;width:100%;border:1px solid silver;" cellpadding="2" class="table-variable-list">
            <tr class="var-th">
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">ID</xsl:with-param></xsl:call-template></td>
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Name</xsl:with-param></xsl:call-template></td>
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Label</xsl:with-param></xsl:call-template></td>
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Type</xsl:with-param></xsl:call-template></td>
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Format</xsl:with-param></xsl:call-template></td>
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Question</xsl:with-param></xsl:call-template></td>
            </tr>
            <xsl:apply-templates select="//ddi:codeBook/ddi:dataDscr/ddi:var[@files=$file]"/>
        </table>
        </div>    
        </xsl:template> 

        <xsl:template match="ddi:var">
        <xsl:variable name="class">
        <xsl:choose>
            <xsl:when test="position() mod 2 = 0">
                <xsl:value-of select="'row-color1'"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="'row-color2'"/>
            </xsl:otherwise>
        </xsl:choose>
        </xsl:variable>
                <xsl:variable name="id" select="@ID"/>
                <xsl:variable name="link">#<xsl:value-of select="@files"/><xsl:value-of select="$id"/></xsl:variable>
        <tr valign="top" class="{$class}" style="cursor:pointer"  id="{$id}" >          
            <td><xsl:value-of select="@ID"/></td>
            <td><xsl:value-of select="@name"/></td>
            <td><xsl:value-of select="ddi:labl"/></td>
            <td><xsl:value-of select="@intrvl"/></td>
            <td><xsl:value-of select="ddi:varFormat/@type"/></td>
            <td><xsl:value-of select="ddi:qstn/ddi:qstnLit"/></td>
        </tr>
        </xsl:template>
       <!-- 4.3 FILE -->
<xsl:template match="ddi:fileDscr">
    <xsl:variable name="file" select="@ID"/>
    <h2><xsl:value-of select="substring-before(ddi:fileTxt/ddi:fileName,'.NSDstat')"/></h2>
    <table class="datafile-info" cellpadding="4" >
        <tr valign="top">
            <td style="width:100px"><xsl:call-template name="gettext"><xsl:with-param name="msg">Content</xsl:with-param></xsl:call-template></td>
            <td>
                    <div style="width:100%;height:80px; overflow:auto;border:1px solid silver;background-color:none;">
                        <div style="padding:5px;">
                            <xsl:value-of select="normalize-space(ddi:fileTxt/ddi:fileCont)"/>
                        </div>
                    </div>
            </td>
        </tr>
        <tr valign="top">
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Cases</xsl:with-param></xsl:call-template></td>
            <td><xsl:value-of select="ddi:fileTxt/ddi:dimensns/ddi:caseQnty"/></td>
        </tr>
        <tr valign="top">
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Variable(s)</xsl:with-param></xsl:call-template></td>
            <td><xsl:value-of select="ddi:fileTxt/ddi:dimensns/ddi:varQnty"/></td>
        </tr>
        <tr valign="top">
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Structure</xsl:with-param></xsl:call-template></td>
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Type</xsl:with-param></xsl:call-template>: <xsl:value-of select="ddi:fileTxt/ddi:fileStrc/@type"/><br/>
                    <xsl:call-template name="gettext"><xsl:with-param name="msg">Keys</xsl:with-param></xsl:call-template>: 
                    <xsl:call-template name="getVariableById"><xsl:with-param name="str"><xsl:value-of select="ddi:fileTxt/ddi:fileStrc/ddi:recGrp/@keyvar"/></xsl:with-param></xsl:call-template>
            </td>
        </tr>
        <tr valign="top">
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Version</xsl:with-param></xsl:call-template></td>
            <td><xsl:value-of select="ddi:fileTxt/ddi:verStmt/ddi:version"/></td>
        </tr>
        <tr valign="top">
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Producer</xsl:with-param></xsl:call-template></td>
            <td><xsl:value-of select="ddi:fileTxt/ddi:filePlac"/></td>
        </tr>
        <tr valign="top">
            <td><xsl:call-template name="gettext"><xsl:with-param name="msg">Missing Data</xsl:with-param></xsl:call-template></td>
            <td>    <div style="width:100%;height:80px; overflow:auto;border:1px solid silver;background-color:white;">
                        <div style="padding:5px;">
                            <xsl:value-of select="ddi:fileTxt/ddi:dataMsng"/>
                        </div>
                    </div>
            </td>
        </tr>

    </table>
</xsl:template> 
<!-- FileRef -->
<xsl:template name="fileRef">
    <xsl:param name="fileId"/>
        <xsl:apply-templates select="/ddi:codeBook/ddi:fileDscr[@ID=$fileId]/ddi:fileTxt/ddi:fileName"/>
</xsl:template>
<!-- Filename -->
<xsl:template match="ddi:fileName">
    <!-- this template removes the .NSDstat extension -->
    <xsl:variable name="filename" select="normalize-space(.)"/>
    <xsl:choose>
        <xsl:when test=" contains( $filename , '.NSDstat' )">
            <xsl:value-of select="substring($filename,1,string-length($filename)-8)"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$filename"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>


<xsl:template name="getVariableById">
<xsl:param name="str"/>
<xsl:variable name="delimeter" select="' '"/>
    <xsl:choose>
    <xsl:when test="contains($str,$delimeter)">
            <xsl:variable name="varid"><xsl:value-of select="substring-before($str,$delimeter)"/></xsl:variable>
            <xsl:variable name="var" select="//ddi:codeBook/ddi:dataDscr/ddi:var[@ID=$varid]"/>
            <xsl:value-of select="$var/@name"/>(<xsl:value-of select="normalize-space($var/ddi:labl)"/>), 
        <xsl:call-template name="getVariableById"> 
            <xsl:with-param name="str" select="substring-after($str,$delimeter)"/>
            <xsl:with-param name="delimeter" select="$delimeter"/>
        </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
            <xsl:variable name="var" select="//ddi:codeBook/ddi:dataDscr/ddi:var[@ID=$str]"/>
            <xsl:value-of select="$var/@name"/>(<xsl:value-of select="normalize-space($var/ddi:labl)"/>)
      </xsl:otherwise>
     </xsl:choose>
 </xsl:template>

1 个答案:

答案 0 :(得分:0)

正如我在评论中告诉你的那样,你的问题绝对不清楚......这个答案是一个盲目的镜头,使用我的魔法玻璃球......还有一些研究......

你的样式表在这里检索一些东西:

<xsl:apply-templates select="//ddi:codeBook/ddi:fileDscr[@ID=$file]"/>

命名空间ddi:

上声明
xmlns:ddi="http://www.icpsr.umich.edu/DDI"

只需点击此链接即可进入名为文档,发现和互操作的平台,该平台提供对调查,文档等数据的公共访问。我没有深入研究,但这似乎是加载数据的公共资源,很可能是以XML格式提供的。

如上所述:我没有深入研究......可能这是无意义的,DDI只是一种通用格式/接口,以可互换的格式描述这种数据。在这种情况下,答案可能是此处<xsl:include href="gettext.xslt"/> ...

中包含的文件

你的样式表 - 至少我是这么认为 - 不会调用来自任何经典RDBMS的任何数据,而是从某个地方获取XML并将转换这个转换为HTML - 表。这将在Web页面中显示给用户。您的应用程序可能会将所需数据作为参数$file传递。

Read the getting started section for DDI here

我的神奇玻璃灯泡现在需要新电池......