2011-09-12 5 views
1

は少し助けが必要です。私は都市のリストと画像のURLのXMLを持っています。 XMLには任意の数の都市を含めることができますが、XSLTページにセクションを表示したいのですが、私はちょうどいくつかのイメージを表示しています(XMLの都市のx量のうち4つを指定できます)。 Idはそれに属性urlが付いている任意の都市を無作為に選んで(これはページがロードされるたびに都市の4つの異なるイメージを選ぶことによって)動的に行うことができます。ここに私のXMLの例があります。XMLからランダムなURLを取得する

<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関数を書く必要があるかどうかはわかりません....いずれにしても、どのように対処するかわかりません。私は都市を一度ループすると、それをランダムにする方法はわかりません。

+0

XSLTにランダム関数はありません。確かに書くことができますが(または既存のものを使用することもできます)、結果からランダムな要素を選択する方が良いでしょうし、使用するスタイルシートにパラメータとして乱数を渡す方がはるかに優れています。 – Flynn1179

+0

@ Flynn1179 - 考えてくれてありがとう – Hatzi

+0

@ Flynn1179:もっと正確にしよう:乱数を生成するための標準* XSLTやXPath関数はありません。 FXSLはこのような機能やテンプレートを約10年前に提供していました。 –

答えて

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/

+0

@ Xenon - ご協力いただきありがとうございます – Hatzi

+0

問題が解決した場合は、左側の緑色のチェックマークをクリックして、自分の答えを回答として受け入れることを検討してください。 –

0

純粋なXSLT(1.0または2.0)に擬似乱数列を生成することが可能です。

は "FXSLでサイコロを鋳造:乱数生成関数XSLTに" 私の作品を参照してくださいhere

もちろん、すべての変換で同じシーケンス番号を生成しない場合は、毎回異なる何かを変換にパラメータとして渡す必要があります。これは、たとえば、現在の時間。