2017-06-28 5 views
0

をループIは、XMLフィードをレンダリングしようとしている10日間苦労されています:XML処理、発注や

http://feed.harjbains.gnomen-europe.com/xml-feed/

私はsimplexmlxmlDOMとXSLTすべてのニュアンスを持って試してみました。私のプログラミングスキルは、現時点で少し挑戦されています。私の医者が私に与えた薬であるかどうかわからない、あるいは私はちょうど古くなり、ハッキングコードをあきらめるべきです。

多次元配列のJSONとXMLスタイルシートを調べましたが、XSLTは非常に面倒です。XMLが気に入らず、自分のスタイルシートに干渉します。

は私が状態によって結果を、date_updatedが価格のいずれかため、それを表示制限することにより、XMLをレンダリングし、nはにレコードの数を制限することができることができるようにしたいです。

ここでは、各要素を配列に配置するコードを示しますが、このような並べ替えはできません。

<?php 
    $xml = simplexml_load_file("http://feed.harjbains.gnomen-europe.com/xml-feed/"); 

    $properties = $xml; 

    $id    = array(); 
    $beds   = array(); 
    $baths   = array(); 
    $price   = array(); 
    $address1  = array(); 
    $area   = array(); 
    $postcode  = array(); 
    $date_updated = array(); 
    $transaction = array(); 
    $status   = array(); 
    $image   = array(); 
    $img   = array(); 
    $description = array(); 

    $i=0; 
    $totrecs=0; 
    foreach ($properties as $property) { 
     $i=$i+1; 
     $address[$i]  = $property->address1; 
     $id[$i]   = $property->id; 
     $beds[$i]   = $property->beds; 
     $baths[$i]  = $property->baths; 
     $price[$i]  = $property->price; 
     $address1[$i]  = $property->address1; 
     $area[$i]   = $property->area; 
     $postcode[$i]  = $property->postcode; 
     $date_updated[$i] = $property->date_updated; 
     $transaction[$i] = $property->transaction; 
     $status[$i]  = $property->status; 
     $image[$i]  = $property->image; 
     $description[$i] = $property->description; 
     $totrecs   = count($id); 

     if(isset($property->image->img)) { 
      //echo $address1[$i]."<BR>"; 
      $image[$i] = true; 
      $x=0; 
      foreach($property->image->img as $a) { 
       $img[$i][$x]= $a; 
       //echo $img[$i][$x]."<BR>"; 
       $x=$x+1; 
      } 
     } else { 
      $image[$i] = false; 
     } 
    } 
?> 

Harj

答えて

0

sort方法を維持するようにXSLTを見直し。デモンストレーションのために、以下では、元のXMLフィードを価格順に降順で並べ替えたXMLに変換し、特定の要素のみを選択し、最初の5つ(<と等価)にフィルタし、= 'Let'の要素のみを返します。

XSLT(としての.xslファイルまたは埋め込まれたPHPの文字列を保存)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes" /> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/properties"> 
    <xsl:copy> 
     <xsl:apply-templates select="property[position() &lt; 6 and status='Let']"> 
      <xsl:sort select="translate(price, ',', '')" data-type="number" order="descending"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="property"> 
    <xsl:copy> 
    <xsl:copy-of select="id|beds|baths|price|address1|area|postcode|date_updated|transaction|status|image|img|description"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

PHP

(PHP-XSL拡張子が.iniファイルで有効になっているようにしてください)
<?php 

// LOAD XML FEED 
$xml = simplexml_load_file("http://feed.harjbains.gnomen-europe.com/xml-feed/"); 

// LOAD XSLT SCRIPT 
$xsl = new DOMDocument; 
$xsl->load('XSLT_Script.xsl'); // OR $xsl->loadXML($xslstring); 

// INITIALIZE TRANSFORMER 
$proc = new XSLTProcessor; 
$proc->importStyleSheet($xsl);  

// TRANSFORM SOURCE TO NEW TREE 
$newXML = $proc->transformToXML($xml); 

// ECHO OUTPUT 
echo $newXML; 

// SAVE OUTPUT TO FILE 
file_put_contents('Output.xml', $newXML); 

?> 

出力

<properties> 
    <property> 
     <id>1184</id> 
     <beds>3</beds> 
     <baths>3</baths> 
     <image> 
     </image> 
     <price>695</price> 
     <area>Wolverhampton</area> 
     <address1>Park Hall Road</address1> 
     <description>A vastly extended three bedroom semi-detached property. Just been totally re-furbished. Comprising of front reception room, extended through lounge, third room which can be used as fourth bedroom. This leads into a shower room which has WC and basin. Utility room with plumbing. Fitted kitchen with gas cooker and hob. To the first floor, master bedroom with en-suite. Two further double bedrooms and family bathroom. Rear garden and front garden with drive for off-road parking.</description> 
     <postcode>WV4 5DU</postcode> 
     <date_updated></date_updated> 
     <transaction>2</transaction> 
     <status>Let</status> 
    </property> 
    <property> 
     <id>1176</id> 
     <beds>3</beds> 
     <baths>1</baths> 
     <image> 
     </image> 
     <price>575</price> 
     <area>Wolverhampton</area> 
     <address1>Park Hall Road</address1> 
     <description>A very well presented three bedroom semi-detached property which has been totally re-furbished. Living room, leading to dining room and fitted kitchen with cooker. Three bedrooms and new family bathroom with shower. New flooring and carpets throughout. Double glazed and gas central heated. Rear garden with patio, front garden with drive leading to garage. Available immediately.</description> 
     <postcode>WV4 5DU</postcode> 
     <date_updated></date_updated> 
     <transaction>2</transaction> 
     <status>Let</status> 
    </property> 
    <property> 
     <id>1181</id> 
     <beds>3</beds> 
     <baths>1</baths> 
     <image> 
     </image> 
     <price>550</price> 
     <area>Willenhall</area> 
     <address1>Westfield Road</address1> 
     <description>A very well presented three bedroom semi-detached property. Front reception room, large fitted kitchen with dining area. To the first floor, three bedrooms and modern family bathroom with separate shower cubicle. Front garden with space for off-road parking, rear garden. Double glazed and central heated throughout. Available immediately.</description> 
     <postcode>WV13 3JX</postcode> 
     <date_updated></date_updated> 
     <transaction>2</transaction> 
     <status>Let</status> 
    </property> 
    <property> 
     <id>1174</id> 
     <beds>3</beds> 
     <baths>1</baths> 
     <image> 
     </image> 
     <price>550</price> 
     <area>Willenhall</area> 
     <address1>Sandringham Avenue</address1> 
     <description>Three bedroom semi-detached property in popular residential area. Comprising of through lounge, fitted kitchen. Patio door to rear garden. Three bedrooms to first floor. Family bathroom with shower. Garage to side, front garden and off-road parking. Available immediately.</description> 
     <postcode>WV12 5TF</postcode> 
     <date_updated></date_updated> 
     <transaction>2</transaction> 
     <status>Let</status> 
    </property> 
    <property> 
     <id>1177</id> 
     <beds>3</beds> 
     <baths>1</baths> 
     <image> 
     </image> 
     <price>500</price> 
     <area>Willenhall</area> 
     <address1>Marshall Road</address1> 
     <description>Three bedroom semi-detached property. Comprising of two reception rooms, fitted kitchen to ground floor. Three bedrooms and family bathroom to first floor. Double glazed and central heated throughout. Front and rear gardens. Available immediately.</description> 
     <postcode>WV13 3PB</postcode> 
     <date_updated></date_updated> 
     <transaction>2</transaction> 
     <status>Let</status> 
    </property> 
</properties>