这是我生成给定 XML 的代码。
my $doc = XML::LibXML::Document->new( '1.0', 'utf-8' );
my $nodeBroadsoft = $doc->createElementNS ('C', 'BroadsoftDocument');
$nodeBroadsoft->setNamespace ('http://www.w3.org/2001/XMLSchema-instance', 'xsi', 0);
$nodeBroadsoft->setAttributeNS('', 'protocol', 'OCI' );
$doc->addChild ($nodeBroadsoft);
my $nodeSession = $doc->createElementNS ('', "sessionId");
$nodeSession->setNamespace ("", undef, 0);
$nodeSession->appendTextNode ($sessionID);
$nodeBroadsoft->addChild ($nodeSession);
my $nodeCommand = $doc->createElementNS ('', "command");
$nodeCommand->setNamespace ("", undef, 0);
$nodeBroadsoft->addChild ($nodeCommand);
$nodeCommand->setAttributeNS ('http://www.w3.org/2001/XMLSchema-instance', 'type', 'AuthenticationRequest');
my $nodeUserId = $doc->createElementNS ('', 'userId');
$nodeUserId->appendTextNode ('automation');
$nodeCommand->addChild ($nodeUserId);
当我运行这个程序时,它会生成以下 XML
<?xml version="1.0" encoding="utf-8"?>
<BroadsoftDocument xmlns="C" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" protocol="OCI">
<sessionId>1231313313133131</sessionId>
<command xsi:type="AuthenticationRequest">
<userId>automation</userId>
</command>
</BroadsoftDocument>
我需要以下内容:
<BroadsoftDocument protocol="OCI" xmlns="C" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<sessionId xmlns="">31436753,1298637565495</sessionId>
<command xsi:type="AuthenticationRequest" xmlns="">
<userId>automation</userId>
</command>
</BroadsoftDocument>
唯一的区别在于 sessionId 和 command 元素。生成的 XML 缺少这两个标记的 "xmlns="""。
我正在尝试使用以下功能,但它不起作用。
$nodeSession->setNamespace ("", undef, 0);
$nodeCommand->setNamespace ("", undef, 0);
据我了解(作为 XML 的初学者),我需要 sessionId 和 command 元素具有空值的默认命名空间。请帮忙
最佳答案
参加聚会已经很晚了,我正在学习 XML namespace 作为与工作相关的不收费的题外话 - 对我来说是一个很好的练习。
如果可以使用空格而不是空字符串来表示空 namespace ,则此方法有效:
my $sessionID=1231313313133131;
my $nodeSession = $doc->createElementNS (" ", "sessionId");
# No need to call setNamespace
$nodeSession->appendTextNode ($sessionID);
结果:
<sessionId xmlns=" ">1231313313133131</sessionId>
我还尝试诉诸 Perl 技巧,使用在 bolean 和数字上下文中为真但字符串化为空字符串的对象。它没有达到预期的效果。对于咯咯的笑声,您可以在 PerlMonks 上查看该尝试.
关于xml - 如何使用 Perl XML::LibXML 表示默认的空命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5155102/