Simplexml_load_string() does not load indexes - php

I am reading a XML file that has the following content:
<column name="title">
<![CDATA[
Sets inktcartridges geschikt voor Brother, Canon, Epson of HP printers (vanaf € 19,95)
]]>
</column>
<column name="description">
<![CDATA[
Niets zo storend als een printer zonder inkt als je net je 300 pagina’s tellende scriptie moet inleveren. Voorkom dit soort narigheden met cartridges voor verschillende printers in zwart en in kleur.
]]>
</column>
Every item will get an empty index when I parse the data with simplexml_load_string:
$xml = simplexml_load_string($data,'SimpleXMLElement',LIBXML_NOCDATA);
output:
[1] => Sets inktcartridges geschikt voor Brother, Canon, Epson of HP printers (vanaf € 19,95)
[2] => Niets zo storend als een printer zonder inkt als je net je 300 pagina’s tellende scriptie moet inleveren. Voorkom dit soort narigheden met cartridges voor verschillende printers in zwart en in kleur.
How can I tell simplexml_load_string that the name item in the column needs to be the index?

I think you cannot do that in a single go.. You could do like this..
<?php
$string = <<<XML
<?xml version='1.0'?>
<cols>
<column name="title">
<![CDATA[
Sets inktcartridges geschikt voor Brother, Canon, Epson of HP printers (vanaf € 19,95)
]]>
</column>
<column name="description">
<![CDATA[
Niets zo storend als een printer zonder inkt als je net je 300 pagina’s tellende scriptie moet inleveren. Voorkom dit soort narigheden met cartridges voor verschillende printers in zwart en in kleur.
]]>
</column>
</cols>
XML;
echo "<pre>";
$xml = simplexml_load_string($string,'SimpleXMLElement',LIBXML_NOCDATA);
$new_arr = array();
for($i=0;$i<count($xml->column);$i++)
{
$new_arr[(string)$xml->column[$i]->attributes()[0]]=trim(strip_tags($xml->column[$i]->saveXML()));
}
print_r($new_arr);
OUTPUT :
Array
(
[title] => Sets inktcartridges geschikt voor Brother, Canon, Epson of HP printers (vanaf € 19,95)
[description] => Niets zo storend als een printer zonder inkt als je net je 300 pagina’s tellende scriptie moet inleveren. Voorkom dit soort narigheden met cartridges voor verschillende printers in zwart en in kleur.
)
Working Demo

Related

preg_replace for "phpbb" quote and color tag from string

I have a string like below and I want to parse the quote tag tag to <blockquote>"Content</blockquote> and want to replace the color tag with an empty string.
Input:
[quote="De real one ROOFVISSER":g3o3w038][color=green:g3o3w038]Thnxxx voor de oppeppende taal Egon, maar het zal niet veel helpen volgende week repetitieweek en samen wonen is net zo erg als een zeurende moeder waarvan je alleen maar mag gaan leren totdat je er koppijn van krijgt.......
[/color:g3o3w038][/quote:g3o3w038]
Output:
<blockquote>Thnxxx voor de oppeppende taal Egon, maar het zal niet veel helpen volgende week repetitieweek en samen wonen is net zo erg als een zeurende moeder waarvan je alleen maar mag gaan leren totdat je er koppijn van krijgt.......</blockquote>
I have already tried the below things and StackOverflow answers as well,
Re-enabling Quotes in phpBB Color Code
preg_match_all('/\[(b|i|size|color|center|quote|url|img)=?(.*?)\](.+?)\[\/\1\]/', $input_lines, $output_array);
but it returns the blank output array.
Please suggest me correct preg_replace pattern to filter out the content.
This is probably most easily done using two regexs, one to remove the [color...] tags and one to replace the [quote...] tags with <blockquote>:
$string = '[quote="De real one ROOFVISSER":g3o3w038][color=green:g3o3w038]Thnxxx voor de oppeppende taal Egon, maar het zal niet veel helpen volgende week repetitieweek en samen wonen is net zo erg als een zeurende moeder waarvan je alleen maar mag gaan leren totdat je er koppijn van krijgt.......
[/color:g3o3w038][/quote:g3o3w038]';
echo preg_replace(array('#\[/?color[^]]*]#', '#\[(/?)quote[^]]*]#'), array('', '<$1blockquote>'), $string);
Output:
<blockquote>Thnxxx voor de oppeppende taal Egon, maar het zal niet veel helpen volgende week repetitieweek en samen wonen is net zo erg als een zeurende moeder waarvan je alleen maar mag gaan leren totdat je er koppijn van krijgt....... </blockquote>
Demo on 3v4l.org

alerbox with value from a list, done by a button

I m trying to get a id from a list by clicking on a button thats included in the list.The information in the list is generated from a openlayers map. The list is automatically generated from the map. The list looks like this. The id i want is the value of dans
The code i m using is as following:
<ul id ="table_overvieuw">
<#list features as feature>
<li><b>Type: ${type.name}</b> (id: <em>${feature.fid}</em>):
<ul>
<#list feature.attributes as attribute>
<#if !attribute.isGeometry>
<li><b>${attribute.name}</b></li>
${attribute.value}
</#if>
</#list>
<br><br>
<input type="button" name="geef slijpplaten info" class="ok" value="OK" onclick="myFunction()" />
</ul>
</li>
</#list>
</ul>
<script type="text/javascript">
function highlight(e) {
if (selected[0]) selected[0].className = '';
e.target.parentNode.className = 'selected';
}
var table = document.getElementById('table_overvieuw'),
selected = table.getElementsByClassName('selected');
table.onclick = highlight;
function myFunction(){
alert($("li.selected.value li:first" ).html());
}
</script>
The renderded html of the list is:
<html><head>
<style>
ul {
background: #cce5ff;
padding: 20px;
}
ul li {
margin: 5px;
}
.selected {
background-color: brown;
color: #FFF;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script><style type="text/css"></style>
</head>
<body><ul id="table_overvieuw">
<li><b>Type: dans_compleet</b> (id: <em>dans_compleet.fid--50014eb6_15374e6dbd1_-779f</em>):
<ul>
<li><b>dans</b></li>
40347
<li><b>x_coord</b></li>
221405
<li><b>y_coord</b></li>
591262
<li><b>dans_code</b></li>
40347
<li><b>archis_onderzoeksmeldingsnr</b></li>
21475 and 24639
<li><b>title</b></li>
De (on)mogelijkheden van archeologisch vriendelijk bouwen op terpen en wierden
<li><b>creator</b></li>
Huisman, D.J.
<li><b>contributor</b></li>
Doesburg, J. van; Muller, A.; Stover, J.
<li><b>date_created</b></li>
2009
<li><b>rights_holder</b></li>
Rijksdienst voor het Cultureel Erfgoed
<li><b>publisher</b></li>
Rijksdienst voor het Cultureel Erfgoed
<li><b>description</b></li>
Bouwaanvragen voor de realisatie van nieuwbouw op de wettelijk beschermde archeologische monumenten Kenwerd en Groot Wetsinge in de provincie Groningen vormden aanleiding in het kader van het MADE-project onderzoek te doen naar de mogelijke effecten van heien op wierdelagen en daarmee samenhangende grondsporen. Voorafgaande aan het heien zijn op beide locaties boringen gezet en proefsleuven gegraven om de stratigrafische opbouw te bepalen. Tevens zijn uit de profielen micromorfologische monsters genomen. In Kenwerd is er sprake van een wierde en in Groot Wetsinge van een valgen. Beide complexen lijken in de Late IJzertijd \xe2\x80\x93 Vroeg Romeinse tijd te zijn ontstaan. Nadat de heipalen waren aangebracht zijn opnieuw sleuven gegraven en daaruit micromorfologische monsters genomen. Op basis van de veldwaarnemingen en resultaten van de analyse van de slijpplaten kan worden aangenomen dat schade door ingeheide betonnen heipalen in beide gevallen slechts enkele centimeters buiten de paal zelf waarneembaar zal zijn. In algemene zin zal dit gelden voor alle terpen en wierden met een zelfde samenstelling en structuur. Hier moet evenwel de volgende kanttekening worden geplaatst. Uit de waarnemingen in een slijpplaat uit Groot Wetsinge blijkt dat zandlagen w\xc3\xa9l laterale effecten van heipalen kunnen laten zien. Als zandlagen dikker zijn en niet, zoals in Groot Wetsinge het geval is, kleilaagjes of -laminae bevatten, is de schade aanzienlijk groter. Dat geldt ook als het zand grover en/of hoekiger is. Daarnaast is het logisch dat een heipaal die door een bakstenen fundering, liggend hout of een compacte ,mestlaag wordt geheid, of die andere harde of taaie obstakels raakt, veel grotere schade zal aanrichten. Bij beslissingen over het al dan niet toestaan van heien op beschermde terpen en wierden moeten deze punten worden meegenomen.<br>Extrapolatie van de onderzoeksresultaten van Kenwerd en Groot Westinge naar andere gebieden is niet aan te raden. Terpen en wierden hebben een zeer specifieke samenstelling en genese. Het is daarom van groot belang om vergelijkbaar onderzoek uit te voeren in andere gebieden en op andersoortige vindplaatsen om die wijze uiteindelijk tot een algemener beeld te komen van de effecten van het gebruik van heipalen op terreinen met archeologische resten.<br><p></p>
<li><b>subject_abr_complex</b></li>
Nederzetting - Terp/wierde
<li><b>temporal_abr</b></li>
Middeleeuwen: 450 - 1500 nC and Nieuwe tijd: 1500 - heden
<li><b>spatial_point</b></li>
<li><b>spatial_coverage</b></li>
<li><b>relation</b></li>
Rapportage ARcheologische Monumentenzorg 176
<br><br>
<input type="button" name="geef slijpplaten info" class="ok" value="OK" onclick="myFunction()">
</ul>
</li>
</ul>
<script type="text/javascript">
function highlight(e) {
if (selected[0]) selected[0].className = '';
e.target.parentNode.className = 'selected';
}
var table = document.getElementById('table_overvieuw'),
selected = table.getElementsByClassName('selected');
table.onclick = highlight;
function myFunction(){
alert($("li.selected.value li:first" ).html());
}
</script>
</body></html>
If i click on my button(after selecting) i get dans and not the value of dans. Can somebody give me a hand?
Okay, this is a bit of a slap-dash approach, with little changes that need to be made to your code, but it should get you what you want.
Firstly wrap ${attribute.value} in span tags so we can select it in js/jquery. Then alter the alert in myFunction() to:
alert($("li.selected").next('span').html());
But I would recommend that you rethink your approach to this. I would have the values of the attributes, wrapped in span tags, inside the li tags. This would then make the selection process of the selected li much easier ($('li.selected span').html();) and reliable as, currently, there is no real guarantee that the next span is the corresponding value to the selected li.

SimpleXML create feed - loop gives wrong output

Having problem with creating a datafeed with simpleXML. Currently using a loop to put products inside a data feed but the data of all the products is inserted inside the first product. Giving me the following output:
<products>
<product>
<product_id>36440</product_id>
<product_name>Snoerloze ramenwasser</product_name>
<brand/>
<description>
<h1>Droge schone ramen in een handomdraai... streeploos!</h1> <h3>Dankzij de nieuwe, inventieve draadloze ramenreiniger</h3> <ol> <li> Licht in gewicht, compact en extreem krachtig</li> <li>Bespaart u tijd</li> <li> Een snelle en effectieve manier om zowel binnen als buiten al uw ramen streeploos schoon en droog te maken. </li> <li>Laat geen watersporen, strepen of druppels achter</li> </ol> <h3><br />Bent u die strepen op het raam ook zo beu? Dit is de nieuwe - tijdbesparende - leuke manier om uw ramen streeploos schoon te krijgen in een handomdraai. Al het vuile water wordt opgezogen, zonder een druppel achter te laten. </h3> <p>Bestreepte, vuile ramen zijn verleden tijd, dankzij de snoerloze ramenwasser. Hij is gemakkelijk in gebruik, ideaal om condens druppels of kalkplekken tegen te gaan en om natte plekken snel en eenvoudig op te zuigen. Ideaal ook in de badkamer. Omdat de ramenwasser draadloos is kunt u hem zowel binnen als buiten gebruiken. Serres, badkamers, tafels, ramen en zelfs de caravan zijn in mum van tijd sprankelend schoon. Werkt op 4 AA alkaline batterijen, welke u van ons GRATIS meegeleverd krijgt!</p> <h3>Kinderlijk eenvoudig...</h3> <p>Spray het raamoppervlak in met uw favoriete glas reiniger, maak de oppervlakte schoon met een doek, en zuig met de ramenwasser het water weg. Zonder een druppel achter te laten, helemaal STREEPLOOS!... zo simpel is het!</p> <h3>Al het water wordt opgezogen in het interne waterreservoir. Voor een kristal helder STREEPLOOS resultaat zonder druppels.</h3>
</description>
<short_description>
Heeft u moeite om ruiten en spiegels streeploos te reinigen? Met deze ruitenreiniger wist en zuigt u in één handomdraai. Snoerloos, dus handzaam en licht van gewicht. Het water drupt niet op uw kozijnen of vensterbank, maar wordt door deze reiniger volledig opgezogen. Nawrijven is overbodig. Ideaal voor alle gladde oppervlakken.
</short_description>
<product_id>36287</product_id>
<product_name>Rekbare tuinslang 7,5m</product_name>
<brand/>
<description>
<h2>De meest ideale tuinslang ter wereld!</h2> <p>Sluit deze slang aan op de kraan en als het water erdoor stroomt verdubbelt de slang in lengte. Ideaal voor de tuin of het wassen van de buitenramen. Zodra u de watertoevoer sluit, krimpt de slang weer tot een klein handzaam pakketje. Inclusief aansluitstuk en instalbare spuitkop.</p>
</description>
<short_description>
</product>
<product/>
</products>
To create this feed i'm using the following php code:
$xml = new SimpleXMLElement('<products></products>');
$products = _prepareCollection();
$obj = Mage::getModel('catalog/product');
foreach($products as $productid)
{
$_product = $obj->load($productid);
$model = Mage::getModel('catalog/product');
$_product = $model->load($productid);
$_product->getFinalPrice();
$product = $xml->addChild('product');
$product->addChild('product_id',$_product->getSku());
$product->addChild('product_name',$_product->getName());
$product->addChild('brand',$_product->getAttributeText('manufacturer'));
$product->addChild('description',html_entity_decode($_product->getDescription()));
$product->addChild('short_description',html_entity_decode($_product->getShortDescription()));
}
Hope anyone can help me with this problem. Thanks in advance!
Doesn't actually have an answer, but after adding more childs into the feed the problem solved itself.
Working code:
$xml = new SimpleXMLElement('<products></products>');
$products = _prepareCollection();
$obj = Mage::getModel('catalog/product');
foreach($products as $productid)
{
$_product = $obj->load($productid);
$model = Mage::getModel('catalog/product');
$_product = $model->load($productid);
$_product->getFinalPrice();
$product = $xml->addChild('product');
$product->addChild('product_id',$_product->getSku());
$product->addChild('product_name',$_product->getName());
$product->addChild('brand',$_product->getAttributeText('manufacturer'));
$product->addChild('description',html_entity_decode($_product->getDescription()));
$product->addChild('short_description',html_entity_decode($_product->getShortDescription()));
$product->addChild('promotion_details');
$product->addChild('deeplink',$_product->getProductUrl());
$product->addChild('delivery_period');
$product->addChild('delivery_cost','6.99');
$product->addChild('stock_level');
$product->addChild('stock_level_date');
$product->addChild('embargo');
$product->addChild('expiry');
$product->addChild('currency');
$product->addChild('display_price',$_product->getFinalPrice());
$product->addChild('price',$_product->getFinalPrice());
$product->addChild('image_thumbnail',$_product->getThumbnailUrl());
$product->addChild('image_url',$_product->getImageUrl());
$product->addChild('image_large_url',$_product->getImageUrl());
$product->addChild('language');
$cats = $_product->getCategoryIds();
$categories = $product->addChild('categories');
foreach($cats as $category_id)
{
$_cat = Mage::getModel('catalog/category')->load($category_id) ;
$category = $categories->addChild('category');
$category->addChild('category_id', $category_id);
$category->addChild('category_name',$_cat->getName());
}
}

Wordpress posts to xml

I have a project where i have to link values given the wordpress backend to xmls, since i am new to Worpress i don't know where to start.
So the xml looks like this
<?xml version="1.0"?>
<articles>
<article>
<title><![CDATA[Teddiedrum - The Audience]]>
</title>
<image><![CDATA[http://niteversions.com/uploads/Teddiedrum-The-Audience-490x490.jpg]]>
</image>
<content>
<![CDATA[Oei.]]>
</content>
<date>
<![CDATA[16/04/2012]]>
</date>
</article>
<article>
<title><![CDATA[Soap&Skin - Boat Turns Toward The Port ]]>
</title>
<image><![CDATA[http://neuundgut.zib21.com/wp-content/uploads/2011/12/soap-skin-boat-turns-towards-the-boat-video.jpg]]>
</image>
<content>
<![CDATA[Elke aanleiding moéten we gebruiken om deze magistrale Soap&Skin-song te posten. We geraken immers nog steeds niet uit de wurggreep van ‘Boat Turns Toward The Port’. De 22-jarige Anja Plaschg slaat ons, op amper 2:30, compleet murw met dit hartverscheurend, schuifelend treurlied. Alle haren overeind, woensdagavond in AB, Brussel.]]>
</content>
<date>
<![CDATA[17/04/2012]]>
</date>
</article>
<article>
<title><![CDATA[Mr. Scruff Vs Kirsty Almeida - Pickled Spider]]>
</title>
<image><![CDATA[http://ecx.images-amazon.com/images/I/41HRpRNhG-L.jpg]]>
</image>
<content>
<![CDATA[De dolgedraaide Ninja Tuner Mr Scruff palmt vrijdag - van 20u30 tot 2u (!) - het podium van de Brusselse VK* in. Mail snel naar filip.rifraf#skynet.be met als subject Mr. Scruff voor één van de 3 gratis duotickets. De winnaars maken we hier donderdag bekend. “Maar als je niet tegen vette bassen kan, ben blijf je beter thuis”, waarschuwt hij. Doe de bass-test met deze ‘Pickled Spider’.]]>
</content>
<date>
<![CDATA[18/04/2012]]>
</date>
</article>
<article>
<title><![CDATA[DJ Muggs feat Dizzee Rascal & Bambu - Snap Ya Neck Back]]>
</title>
<image><![CDATA[http://www.danceeuphoria.com/wp-content/uploads/2012/03/djmuggssnapyaneckback.jpg]]>
</image>
<content>
<![CDATA[Een goed jaar geleden op de RifRaf-cover, nu bruutweg een banaan molesterend. Tsssss.]]>
</content>
<date>
<![CDATA[18/04/2012]]>
</date>
</article>
<article>
<title><![CDATA[Steak Number Eight - Dickhead]]>
</title>
<image><![CDATA[http://userserve-ak.last.fm/serve/500/6144813/Steak+Number+Eight++010.jpg]]>
</image>
<content>
<![CDATA[Een goed jaar geleden op de RifRaf-cover, nu bruutweg een banaan molesterend. Tsssss.]]>
</content>
<date>
<![CDATA[19/04/2012]]>
</date>
</article>
<article>
<title><![CDATA[The Heart Is A Drum - Drums Are For Parades feat. Tim Vanhamel]]>
</title>
<image><![CDATA[http://www.liegecity.be/wp-content/uploads/2012/03/DrumsAreForParade.jpg]]>
</image>
<content>
<![CDATA[De 'IMPERIVM’-picture disc van Drums Are For Parades is één van de vele, unieke releases nav Record Store Day, nu zaterdag. Drums Are For Parades sluiten trouwens die hoogdag van de onafhankelijke platenwinkels ’s avonds live af in Handelsbeurs, Gent. Uit ‘IMPERIVM’, deze ‘The Heart Is A Drum’ feat. Tim Vanhamel.]]>
</content>
<date>
<![CDATA[20/04/2012]]>
</date>
</article>
</articles>
What i want is to make fields in the backend like title, image, content, date and everytime this field is saved it adds a new node to the xml.
Any information on how to start doing this / the steps i have to undertake would be welcome.
Kind regards
Toon
There's already 2 tools available in wordpress import and export xml in backend just install that and you'll get what you want there's no need to do any custom thing on every post but if you still want it then read about 'publish_post' hook
As mentioned, your best bet would be to search existing plugins. I would start with this one and maybe see about modifying it to your needs:
http://wordpress.org/extend/plugins/backwpup/

mysql replace text

I have this uncomplete query:
update `wp_posts` set `post_content` = replace(`post_content`, 'src="/uploads/*"', 'src="blog/uploads/*"');
In the field post_content I have some html code.
I want to search for src="/uploads/*", * = any image.
And replace it with src="blog/uploads/*" and keep the image;
How to do this?
Thanks
example text:
<p><strong><em>De tips en tricks, die in de Flexmailblog worden meegegeven, zijn een handig vertrekpunt voor de e-mailmarketeer. Maar hoe ziet de ideale e-mailcampagne er nu precies uit? </em></strong></p><br /><!-- s9ymdb:138 --><img class="serendipity_image_center" width="400" height="519" style="border: 0px; padding-left: 5px; padding-right: 5px;" src="/uploads/asu_example.jpg" alt="" /><!--more--><br /><br />
<div align="justify">Laten we beginnen door de illusie alvast te doorprikken: een ideale e-mailcampagne bestaat niet. Maar e-mailmarketeers kunnen na een grondige analyse van de positieve en de ‘pijnpunten’ van de campagne hun conclusies trekken. Perfect bestaat dan wel niet, maar het kan wel benaderd worden.
<br /><br />In deze blogpost zetten we de tering naar de nering. We nemen er een e-mailcampagne van de Amerikaanse vrijwilligersorganisatie Arizona State University (ASU) in the Community bij. De organisatie stuurt twee keer per maand een nieuwsbrief uit om het stafpersoneel, de studenten en de leden van de gemeenschap te informeren over de laatste nieuwtjes. Het doel van de communicatie is het aandikken van de participatie. Vandaag bespreken we de positieve elementen. <br /><br /><strong>Zichtbaar<br /></strong><br />De ‘Join mailing list’-knop is duidelijk zichtbaar en beantwoordt aan één van de sleutelobjectieven van de e-mailcommunicatie namelijk meer inschrijvingen genereren op de nieuwsbrief. Wanneer de nieuwsbrief doorgestuurd wordt naar het netwerk van de ontvanger kan de begunstigde zich meteen inschrijven. <br /><br /><strong>Brand identity<br /></strong><br />Het toevoegen van het logo van de organisatie geeft de nieuwsbrief een sterke <em>brand identity</em>. Het logo is meteen herkenbaar voor de ontvangers, waardoor ze de nieuwsbrief niet gaan categoriseren onder junkmail. <br /><br /><strong>Aandacht trekken<br /></strong><br />De verzender maakt gebruik van een afbeelding om aandacht te trekken naar het belangrijkste artikel van de nieuwsbrief. Afbeeldingen zijn bovendien handig om een groot tekstblok op te breken. <br /><br /><strong>Structuur<br /></strong><br />De nieuwsbrief wordt ingedeeld in verschillende tekstvakken met een eigen achtergrondkleur. Op die manier voeg je structuur toe aan je e-mailcampagne. Bovendien is het voor de ontvanger gemakkelijker om de nieuwsbrief te scannen op content die voor hem interessant is. <br /><br /><strong>Linken<br /></strong><br />De verzender heeft een link toegevoegd in de nieuwsbrief. Dat is een absolute must. Je kan immers niet altijd voorspellen hoe de e-mailcampagne er gaat uitzien in de verschillende e-mailcliënten. Een link, die de ontvanger naar je website verwijst, kan dat voor je oplossen. Voeg een archief nieuwsbrieven toe aan je website zodat je ontvanger de originele versie daar kan bezichtigen.<br /><br />Volg ons en ontdek de Flexmailtips om de e-mailcampagne te verbeteren.
</div>
Is this what you mean?
UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, 'src="/uploads/', 'src="blog/uploads/');

Categories