1

I need to get elements from inside a list, i catch up an update from a single wordpress page in my post.php file trough $post->post_content

The output from it is:

Sportpaleis Antwerpen 25/02/2012 Sioen De Zwerver leffinge 24/03/2012 Nathan The zydeco Cha-Chas n9 Eeklo 24/03/2012 Kraantje Pappie Nijdrop Opwijk 24/03/2012 Eigen Makelij Hof Ter Loo Antwerpen 26/03/2012 test testPura vida Sportpaleis Antwerpen 25/02/2012 Sioen De Zwerver leffinge 24/03/2012 Nathan The zydeco Cha-Chas n9 Eeklo 24/03/2012 Kraantje Pappie Nijdrop Opwijk 24/03/2012 Eigen Makelij Hof Ter Loo Antwerpen 26/03/2012

I need to find a way to get every piece of text seperatly in this list. Can i do this by putting them between div ids? and how would i adress these divs? The point is that i need to export this content to an xml. I can put contents in an xml but the problem is getting this html text into seperate variables so i can put em between those tags example: HTML

<p id="artist">Sioen</p>
<p id="location">De Zwerver leffinge</p>
<p id="date>24/03/2012</p>

Should become: (xml)

<concerts>
<concert>
<artist>Sioen</artist>
<location>De zwerver leffinge</location>
<date>24/03/2012</date>
</concert>
.....
</concerts>

Since the comments suggest that i should put some kind of structure in i used a var_dump on the values with the <p id=""> </p> and the output is

Sioen

De Zwerver leffinge

24/03/2012
...
1
  • is applying apply_filters('the_content', $post->post_content) of any help? Commented Feb 24, 2012 at 13:24

2 Answers 2

1

The output from it is:

If the output is literally what you said, it's not possible. I mean, I know that "Kraantje Pappie Nijdrop Opwijk" means that the artist is "Kraantje Pappie" and the location is "Nijdrop Opwijk", but that's because I'm Dutch and I happen to like "Kraantje Pappie". Most other people wouldn't even know where to split the string, so how do you want to tell your computer how to it?

If the result is coming from the database, perhaps you can request it differently?

UPDATE:

Since the comments suggest that i should put some kind of structure in i used a var_dump on the values with the <p id=""> </p> and the output is

Those linebreaks change everything. You can now operate under the assumption that there's a pattern in the string: artist, break, location, break, date, break. If there's a pattern, you can use that. Assuming that's a format you're always getting, you can do this quite simply:

<?php
$output = 'Sioen 

De Zwerver leffinge

24/03/2012 

Nathan

The zydeco Cha-Chas n9 Eeklo 

24/03/2012 

Kraantje Pappie 

Nijdrop Opwijk 

24/03/2012';

/**
 * Remove empty lines.
 */
$lines = array_map( 'trim', array_filter( explode( "\n", $output ) ) );

/**
 * This is for saving the values temporarily.
 */
$i = 0;
$entries = array( );
$current = array( );

/**
 * Loop through all the entries.
 */
foreach( $lines as $line ) {
    /**
     * Add the current line to the current entry.
     */
    $current[] = $line;

    /**
     * If $i == 2, that was the date. Add $current to the stack, and reset it's contents.
     */
    if( $i ++ === 2 ) {
        $entries[] = $current;
        $current = array( );
        $i = 0;
    }
}

/**
 * Build XML root.
 */
$concerts = new SimpleXmlElement( '<concerts></concerts>' );

/**
 * Append each entry as a concert.
 */
foreach( $entries as $entry ) {
    $concert = $concerts->addChild( 'concert' );

    $concert->addChild( 'artist', array_shift( $entry ) );  
    $concert->addChild( 'location', array_shift( $entry ) );    
    $concert->addChild( 'date', array_shift( $entry ) );    
}

/**
 * Output, finally.
 */
var_dump( $concerts->asXml( ) );

That results in the following output:

<?xml version="1.0"?>
<concerts>
    <concert>
        <artist>Sioen</artist>
        <location>De Zwerver leffinge</location>
        <date>24/03/2012</date>
    </concert>
    <concert>
        <artist>Nathan</artist>
        <location>The zydeco Cha-Chas n9 Eeklo</location>
        <date>24/03/2012</date>
    </concert>
    <concert>
        <artist>Kraantje Pappie</artist>
        <location>Nijdrop Opwijk</location>
        <date>24/03/2012</date>
    </concert>
</concerts>
Sign up to request clarification or add additional context in comments.

4 Comments

well the output is before i added the <p id=""></p> i wanted to know if i could put some html tags in the html and navigate to those tags trough php
yes, there ist no clear structur in your output (i.e. fixed number of words for each date). Can't you fetch a key-value list from the POST? (I don't know wordpress internals, but i guess there must be more methods for processing POST data)
could i get values when there is a break like Sioen <break> De Zwerver leffinge<break> 24/03/2012<break> ?
@ToonVanDooren If that's the case, matching it is quite simple, actually. See updated example.
0

If you need to get the content put them in divs with numeric ids i.e.

<div id='1'>Sportpaleis-Antwerpen-25/02/2012</div>
<div id='2'>Sioen-De Zwerver leffinge-24/03/2012</div>

Now when you get the data, use the php function html_entity_decode find the total divs in the text by php function and then loop them to get the result.

You may seperate them by - to get three different parts of a div.

2 Comments

the thing is i need to display this on the site itself in a descent way also like the last output from my var_dump
you can display in decent way as well, get them from div put them in li to echo.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.