Perl LibXML для написания XML-документа - PullRequest
3 голосов
/ 25 февраля 2011

Я очень новичок в мире XML.Я написал следующий код для генерации XML с использованием 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;

1 Ответ

5 голосов
/ 25 февраля 2011

Из Perldoc:

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

Вам необходимо указать пространство имен при создании элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...