XML::Simpleでnamespaceを設定する

XMLoutのオプションにNSExpand=>1を加えると名前空間を扱えるようになる。XML::NamespaceSupportが必要。

use XML::Simple;
my $obj = {'{http://www.w3.org/2000/xmlns/}foaf' => 'http://xmlns.com/foaf/0.1/',
           '{http://www.w3.org/2000/xmlns/}rdf'  => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
           '{http://xmlns.com/foaf/0.1/}Person'  =>
               {'{http://xmlns.com/foaf/0.1/}name' => 'holidays-l'},
           };
print XMLout($obj, NoAttr => 1, KeyAttr => [], NSExpand => 1, RootName => 'rdf:RDF');

出力はこうなる。

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
  <foaf:Person>
    <foaf:name>holidays-l</foaf:name>
  </foaf:Person>
</rdf:RDF>