Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从下拉列表中选择球队后尝试显示比赛信息_Javascript_Xml_Xslt_Xslt 1.0 - Fatal编程技术网

Javascript 从下拉列表中选择球队后尝试显示比赛信息

Javascript 从下拉列表中选择球队后尝试显示比赛信息,javascript,xml,xslt,xslt-1.0,Javascript,Xml,Xslt,Xslt 1.0,我有一个XML文件中的团队和游戏的数据值,该文件具有以下结构 <Schedule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Teams> <Team>Sandlot</Team> <Team>Rangers</Team> <Team>little guys</Team>

我有一个XML文件中的团队和游戏的数据值,该文件具有以下结构

<Schedule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Teams>
          <Team>Sandlot</Team>
          <Team>Rangers</Team>
          <Team>little guys</Team>
   </Teams>
   <Game status="Played">
          <Home_Team>Sandlot</Home_Team>
          <Away_Team>Rangers</Away_Team>
          <Date>2014-01-10</Date>
          <Home_Team_Score>7</Home_Team_Score>
          <Away_Team_Score>9</Away_Team_Score>
      </Game>
  </schedule>

沙地
流浪者
小家伙
沙地
流浪者
2014-01-10
7.
9
我试图创建一个所有球队的下拉列表,然后当一个球队被选中时,显示他们所有的比赛和他们的详细信息

我正在使用javascript加载样式表,如下所示

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="4.0" omit-xml-declaration="yes" />

<xsl:template match="/Schedule">
    <table class="listing">
        <tr><th>Team</th>
            <td><select name="Team" class="listing" id="teamlist">
                <!--<xsl:apply-templates select="team" /> -->
                <xsl:for-each select="Teams">
                    <option>
                        <xsl:value-of select="Team" />
                    </option>
                </xsl:for-each>
            </select>
            </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <input type="button" value="Submit Team" onclick="displayGames()" />
            </td>
        </tr>
    </table>
</xsl:template>
 </xsl:stylesheet>

团队
下面是我用来尝试在页面上显示它的javascript

<script type="text/javascript">


    var teamL="teamlist.xsl";

    function loadXMLDoc(filename) {
        xhttp = new XMLHttpRequest();
        xhttp.open("GET", filename, false);
        xhttp.send();
        return xhttp.responseXML;
    }

    var xmlDoc=loadXMLDoc(xmlFile);
    var xsltTeamDoc=loadXMLDoc(teamListFile);


    function createXDoc(xFile, PID)
    {
            xDoc=loadXMLDoc(xFile);
            return xDoc;
    }  

    function runTransform(xDoc, xsltDoc) {

            var xProcessor = new XSLTProcessor();  
            xProcessor.importStylesheet(xsltDoc);
            var resultDoc = xProcessor.transformToDocument(xDoc);   
            var serializer = new XMLSerializer();
            var resultStr = serializer.serializeToString(resultDoc);
            return resultStr;
    }
    function init()
    {
        var teamListElem=document.getElementById("teamlist");
        teamListElem.innerHTML=runTransform(xmlDoc,xsltTeamDoc);
    }
</script>

var teamL=“teamlist.xsl”;
函数loadXMLDoc(文件名){
xhttp=newXMLHttpRequest();
xhttp.open(“GET”,filename,false);
xhttp.send();
返回xhttp.responseXML;
}
var xmlDoc=loadXMLDoc(xmlFile);
var xsltTeamDoc=loadXMLDoc(teamListFile);
函数createXDoc(xFile,PID)
{
xDoc=loadXMLDoc(xFile);
返回xDoc;
}  
函数runTransform(xDoc、xsltDoc){
var xProcessor=new XSLTProcessor();
xProcessor.importStylesheet(xsltDoc);
var resultDoc=xProcessor.transformToDocument(xDoc);
var serializer=新的XMLSerializer();
var resultStr=serializer.serializeToString(resultDoc);
返回结果TR;
}
函数init()
{
var teamListElem=document.getElementById(“团队列表”);
teamListElem.innerHTML=runTransform(xmlDoc,xsltTeamDoc);
}
加载页面时,init函数运行并显示id“teamlist”


我还需要创建一个函数来进行计算以显示信息


我当前的问题是,在“team”元素中,我无法使下拉列表中包含的团队数超过第一个团队。

第一个问题是您的计划XML文档格式不正确。开头标记为大写
,结尾标记为小写
。这将导致XML序列化程序错误。尝试将结束标记大写
。另外,您还没有在这里发布HTML,因此我假设您创建的HTML文件包含一些div或其他id为“teamlist”的HTML元素。如果是这种情况,那么在修复XML标记后,假设web服务器上的同一目录中有所有3个文件(XML、xslt、html),您应该能够看到下拉列表。如果您试图在本地加载某些浏览器,它们可能会发出跨域警告

接下来,您需要重新构造XML方案。
节点都应属于同一父节点。您的所有节点都属于不同的父节点。重组如下:

    <Schedule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Teams>
        <Team>Sandlot</Team>
        <Team>Rangers</Team>
        <Team>little guys</Team>
    </Teams>
   <Game status="Played">
      <Home_Team>Sandlot</Home_Team>
      <Away_Team>Rangers</Away_Team>
      <Date>2014-01-10</Date>
      <Home_Team_Score>7</Home_Team_Score>
      <Away_Team_Score>9</Away_Team_Score>
  </Game>
</Schedule>

沙地
流浪者
小家伙
沙地
流浪者
2014-01-10
7.
9
然后,您需要更改XSLT模板。以下是我所拥有的:

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="4.0" omit-xml-declaration="yes" />

    <xsl:template match="/">
        <table class="listing">
            <tr><th>Team</th>
                <td><select name="teamlist" class="listing" id="teamlist">
                    <xsl:apply-templates />
                </select>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="button" value="Submit Team" onclick="display()" />
                </td>
            </tr>
        </table>
    </xsl:template>

    <xsl:template match="Team">
        <option>
            <xsl:value-of select="." />
        </option>
    </xsl:template>

    <xsl:template match="Game">

    </xsl:template>
</xsl:stylesheet>

团队

现在您可以看到第一个模板与根级别“/”匹配,并将模板应用于它。这将在团队节点上循环,并使用第二个模板为每个节点创建选项。第三个模板匹配游戏节点,不包含任何输出-这将禁止在选择标记中的选项标记之后呈现额外的游戏信息。

我确实将结束标记大写,我只是在这里键入时输入错误。这是我在上面添加的html中的正文,它现在显示下拉列表,但它是空的。我有正在显示的信息,但不在下拉框中。它显示在下面,下拉框仍然为空。这是基于我对teamlist.xsl样式表的更改和对XML数据文件中元素的引用。由于提供了额外的信息,我能够使用上面的更改显示下拉列表,但试图合并您的更改,它再次在我身上消失。您如何应用模板/时间表/团队?这是XSLT中的标准吗?该模板未定义。是否只是查看下面的元素?请在for each中尝试选择=“/Teams/Team”,然后在xsl:value of中选择=“.”。这应该会让团队重新出现。关于/Schedule/Teams问题-可以安全地删除匹配属性。太棒了,是的,它现在以某种方式填充了游戏信息:)
<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="4.0" omit-xml-declaration="yes" />

    <xsl:template match="/">
        <table class="listing">
            <tr><th>Team</th>
                <td><select name="teamlist" class="listing" id="teamlist">
                    <xsl:apply-templates />
                </select>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="button" value="Submit Team" onclick="display()" />
                </td>
            </tr>
        </table>
    </xsl:template>

    <xsl:template match="Team">
        <option>
            <xsl:value-of select="." />
        </option>
    </xsl:template>

    <xsl:template match="Game">

    </xsl:template>
</xsl:stylesheet>