2011-02-25 11 views
3

私はXMLの世界では初めてです。 XML :: LibXMLを使用してXMLを生成するためのコードを記述しました。私は、私が正しくないと感じる属性として名前空間を扱っているように思えます。私はそれを行う方法がわかりません。だからあなたの助けを借りて私のコードを修正してください。perl XML文書を書くLibXML

XMLドキュメント:

<RootDocument protocol="OCI" xmlns="C" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <sessionId xmlns="">172.24.160.8,31436753,1298637565495</sessionId> 
    <command xsi:type="AuthenticationRequest" xmlns=""> 
    <userId>automation</userId> 
    </command> 
</RootDocument> 

のPerlスクリプト:

my $ociRequest = XML::LibXML::Document->new('1.0', 'utf-8'); 

my $root = $ociRequest->createElement ('RootDocument'); 

$root->addChild ($ociRequest->createAttribute (protocol => 'OCI')); 
$root->addChild ($ociRequest->createAttribute (xmlns => 'C')); 

$root->addChild ($ociRequest->createAttribute ('xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance')); 
#$root->setNamespace ('http://www.w3.org/2001/XMLSchema-instance', 'xsi', 0); 
$ociRequest->setDocumentElement ($root); 


my $session = $ociRequest->createElement ('sessionId'); 
$session->addChild ($ociRequest->createAttribute (xmlns => '')); 
$session->addChild($ociRequest->createTextNode($sessionID)); 
$root->addChild($session); 

my $command = $ociRequest->createElement ('command'); 
$command->addChild ($ociRequest->createAttribute ('xsi:type' => 'AuthenticationRequest')); 
$command->addChild ($ociRequest->createAttribute ('xmlns' => '')); 

    my $userid = $ociRequest->createElement ('userId'); 
    $userid->addChild($ociRequest->createTextNode('automation')); 
$command->addChild($userid); 

$root->addChild ($command); 


$ociRequest->setDocumentElement($root); 

my $xml = $ociRequest->toString; 
+0

関連するスキーマはありますか? – justkt

答えて

5

はperldocから:

$element = $dom->createElementNS($namespaceURI, $qname); 

あなたが要素を作成するときに、名前空間を指定する必要があります。