从XML中挑选随机URL

时间:2011-09-12 12:59:43

标签: javascript xml xslt

需要一些帮助。我有一个带有城市列表的XML和图像的URL。 XML上可以有任意数量的城市,但是我希望在XSLT页面上有一个部分,我只是展示一些图像(比如说,XML中的x个城市中有4个)。我希望能够通过随机选择任何附加了属性url的城市来动态地执行此操作(因此每次加载页面时都会有4个不同的城市图像)。这是我的XML的一个例子。

<Cities>
    <City Name="London" url="LinkToImage" />
    <City Name="Aberdeen" url="LinkToImage" />
    <City Name="Birmingham" url="LinkToImage" />
    <City Name="Bristol" url="LinkToImage" />
    <City Name="Cardiff" url="LinkToImage" />
    <City Name="Edinburgh" url="LinkToImage" />
    <City Name="Glasgow" url="LinkToImage" />
    <City Name="Liverpool" url="LinkToImage" />
    <City Name="Manchester" url="LinkToImage" />
    <City Name="Newcastle" url="LinkToImage" />
    <City Name="Paris" url="LinkToImage" />
    <City Name="Marseille" url="LinkToImage" />
...
如果我添加另一个属性,即number =“x”,它会有帮助吗?如果可能的id链接以避免这种情况。任何帮助将非常感激。

我不确定我是否可以在XSLT中执行此操作,或者我是否必须编写JavaScript函数....无论哪种方式我都不确定如何解决它。我不知道如果我循环通过城市,如何让它随机。

3 个答案:

答案 0 :(得分:1)

以下是从字符串中执行此操作的完整示例。要获取该字符串(例如,从文件中),您可以使用XMLHttpRequestresponseXML属性。

var doc = 
    '<Cities>' +
    '<City Name="London" url="LinkToImage" />' +
    '<City Name="Aberdeen" url="LinkToImage" />' +
    '<City Name="Birmingham" url="LinkToImage" />' +
    '<City Name="Bristol" url="LinkToImage" />' +
    '<City Name="Cardiff" url="LinkToImage" />' +
    '<City Name="Edinburgh" url="LinkToImage" />' +
    '<City Name="Glasgow" url="LinkToImage" />' +
    '<City Name="Liverpool" url="LinkToImage" />' +
    '<City Name="Manchester" url="LinkToImage" />' +
    '<City Name="Newcastle" url="LinkToImage" />' +
    '<City Name="Paris" url="LinkToImage" />' +
    '<City Name="Marseille" url="LinkToImage" />' +
    '</Cities>';

var parser = new DOMParser();
var xml = parser.parseFromString(doc, "text/xml"); //Convert the text to XML object

var cities = xml.getElementsByTagName("Cities")[0].childNodes; //Get all child of Cities
var randomCity = Math.floor(Math.random() * cities.length); //Pick one at random
var city = cities[randomCity]; //Get it using it's index
alert(city.getAttribute("Name")); //Show it's name

http://jsfiddle.net/Xeon06/f8Ugn/

答案 1 :(得分:0)

答案 2 :(得分:0)

可以在纯XSLT(1.0或2.0)中创建一系列伪随机数。

请参阅我的工作“使用FXSL投射骰子:XSLT中的随机数生成函数 here

当然,如果您不在每次转换时生成相同的数字序列,则需要将每次转换的参数传递给转换 - 例如,这可以是以分钟为单位的当前时间。