How to make xml data in module?

Author Message

Jerry Jalava

Tuesday 18 November 2003 8:38:03 pm

Hi again,

I'm building an import script from AM to eZ and I would like to know how can I insert text data to xml datatype field inside own module?
And also would like to know how to do the same thing with ezauthor datatype.

I've founded how to insert data to normal textfield datatype:
$contentObjectAttributes[0]->setAttribute( 'data_text', $title );
$contentObjectAttributes[0]->store();

But know I could use some help with the xml data...

Thanks again,
Jerry

Paul Forsyth

Wednesday 19 November 2003 2:07:50 am

Its a little more complicated because the string has to be valid xml for the field to work properly.

Heres a code snippet i use to add some a string and some comments. Hope it makes sense :)

paul

-----

$contentObjectAttribute =& $contentObjectAttributes[$key];
$contentClassAttribute =& $contentObjectAttribute->contentClassAttribute();

if ($contentClassAttribute->attribute("name") == "My attribute")
{
$xml = new eZXML();

// Retain the current content of the attribute.
$presentContent=$contentObjectAttribute->attribute("data_text");

// Prepare the original xml for new information.
if ($presentContent != "")
{
// Turn this content into a dom tree so we can add to it.
$originalDomTree =& $xml->domTree( $presentContent );

$originalRoot =& $originalDomTree->root();

$commentSeperator =& $originalDomTree->createElementNode( "paragraph" );
$emphasizeDomNode =& $originalDomTree->createElementNode( "emphasize" );
$emphasizeDomNode->appendChild( $originalDomTree->createTextNode( "------- Additional Comment -----------" ) );

$commentSeperator->appendChild($emphasizeDomNode);

$originalRoot->appendChild( $commentSeperator );
}

// Now re-set the attribute with our new comments. Comments
// contains new xml
$contentObjectAttribute->setAttribute("data_text", $comments);

// Turn the new comments into xml by invoking the ez parsing routines.
$xmlText = new eZXMLText( eZXMLTextType::rawXMLText( $contentObjectAttribute ), $contentObjectAttribute );
$input =& $xmlText->attribute( 'input' );
$isValid = $input->validateInput( $http, "ContentObjectAttribute", $contentObjectAttribute );

// Create a new tree with our newly formed xml.
$newDomTree =& $xml->domTree( $contentObjectAttribute->attribute("data_text") );
$newRoot =& $newDomTree->root();

// First determine whether we should store the new or original xml.
// Add the new children to the original xml.
if ($presentContent != "")
{
if ($newRoot->hasChildren())
{
$rootChildren =& $newRoot->children();
foreach($rootChildren as $child)
{
$originalRoot->appendChild( $child );
}
}

$contentObjectAttribute->setAttribute("data_text", $originalDomTree->toString());
}
else
{
$contentObjectAttribute->setAttribute("data_text", $newDomTree->toString());
}

Paul Forsyth

Wednesday 19 November 2003 2:09:20 am

ack. wish i could use literal to hide the code from the smileys.

jerry, feel free to email me at paul [at] visionwt [dot] com and ill send you the code is use in a better form.

paul

Jerry Jalava

Wednesday 19 November 2003 6:06:24 am

Hi Paul,

Thank you alot... I haven't tested the script yet, but believe it works like a charm.

I'll try it first from here and will email if it doesn't wan't to work... ;)

Once again thank you alot.

Regards,
Jerry

Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.