tags:

views:

29

answers:

2

Im using PEAR XML Serializer to generate xml results from array inputs. I found out that empty array elements are encoded like this: <arraykey/>. I'd rather prefer it this way <arraykey></arraykey>

Below are my options:

   $options = array
   (
    'indent' => ' ',
    'defaultTagName' => $this->xml_tag_name,
    'addDecl' => true,
    'encoding'  => 'UTF-8',
    'rootName' => $this->xml_root_name,
    XML_SERIALIZER_OPTION_RETURN_RESULT => true
   );

Are there any other options to add to fix this?

+1  A: 

In the actual state of the library no, it uses PEAR XML_Util and if you look at the code of XML_Util::createTagFromArray(), it does the following for empty tags:

if (!isset($tag['content']) || (string)$tag['content'] == '')
{
    $tag = sprintf('<%s%s />', $tag['qname'], $attList);
}

You could probably fake empty content with a string that contains a space such as ' ' but that would result into something like <arraykey> </arraykey>.

BTW, <arraykey/> is totally legal in XML (it's recommended for empty tags, it's also used in XHTML).

JP
A: 

Is there a concrete reason you prefer the <tag></tag> format over <tag />? Noting that (as another poster said) <tag /> is totally valid XML. Personally I prefer self-closing for an empty tag.

Ben Williams