猿问

如何使用 XSLT 显示来自 url 的 XML 数据

我通过 Yahoo API 中的 url 获得了动态 XML 体育数据,我想使用 XSLT 在我的网站上显示并排序所选内容。这是第一次使用 XML 和 XLST。在测试时,我已经弄清楚了当将 XML 代码手动粘贴到服务器上的 XML 文件中时如何正确显示它,但我正在努力解决如何从 url 获取 XML 数据源(每天更新)和到网页上。


我有一个 PHP 文件,我在其中成功连接到 feed 并打印原始 XML 数据(将其称为“feed.php”)。我认为问题的一部分在于 XML 数据在该文件中作为字符串输出,因此需要将其转换为文档(对象?),以便 XSLT 可以与 XML 中的元素标签进行交互。在我想要显示所选数据的网页上:


<main>

    <button type="button" onclick="loadStandings(displayOverallStandings)">League Standings</button>

    

    <article id="standings-division">

*league standings to display here when the button is clicked*

    </article>


<script>


// found elsewhere on SO to turn string into XML document


function loadStandings(displayOverallStandings) {

    var xhr = new XMLHttpRequest();

    xhr.onload = function() {

    dump(xhr.responseXML.documentElement.nodeName);

}

    xhr.onerror = function() {

  dump("Error while getting XML.");

}

xhr.onreadystatechange = function () {

        if (this.readyState == 4 && this.status == 200) {

                displayOverallStandings(this);

        }

    }

xhr.open("GET", "feed.php"); // the path to the feed.php file

xhr.responseType = "document";

xhr.send();


}


// more code I found on SO to load xml and xsl docs in browser to display league standings


function displayOverallStandings(xhr) {


    xml = xhr.responseXML;

    xsl = loadXMLDoc("standings.xsl"); // path to the XSL file I've created

// code for IE

if (window.ActiveXObject || xhttp.responseType == "msxml-document")

  {

  ex = xml.transformNode(xsl);

  document.getElementById("standings-division").innerHTML = ex;

  }

// code for Chrome, Firefox, Opera, etc.

else if (document.implementation && document.implementation.createDocument)

  {

  xsltProcessor = new XSLTProcessor();

  xsltProcessor.importStylesheet(xsl);

  resultDocument = xsltProcessor.transformToFragment(xml, document);

  document.getElementById("standings-division").appendChild(resultDocument);

  }

}

</script>


杨__羊羊
浏览 108回答 1
1回答

猛跑小猪

我找到了一个解决方案,在“feed.php”文件中使用 PHP 将提要 xml 数据转换为简单 XML 对象(将数据显示为数组),循环遍历该数组以选择我想要的特定数据,然后将其转换使用 SimpleXMLElement() 函数返回到 xml 标记。这允许创建一个更简单的 xml 文档,并从标签中排除无关的 Yahoo 简介,这与 XSLT 的行为正确。<?php(Feed data saved in $response variable)// convert xml data string into XML object$xml = simplexml_load_string($response);// selected output from object array as manually created XML tags$output = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><content></content>');$date = $output->addChild('date',$xml->date); //append 'date' xml tags and get the date content from the XML object(create more xml tags containing data, etc...)echo $output->asXML();?>
随时随地看视频慕课网APP
我要回答