xml - 如何使用 Perl XML::LibXML 表示默认的空命名空间

标签 xml perl namespaces libxml2

这是我生成给定 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/

相关文章:

C# 类型或命名空间预期混淆

php - 使用PHP在XML文件中搜索特定值

perl - 快速过滤Perl哈希散列

linux - perl grep 和 cli grep 之间的不一致

ruby-on-rails - 我有一个具有以下 namespace 的 ruby​​ View :ActionView::Base.new 但我想添加一个新方法可用于此 ActionView::Base 类

c++ - 为什么 using 指令不是 "associate"与普通函数?

java - 删除java中的按钮阴影(Android)

python - odoo context.get.active_id 不工作

java - ScrollView 折叠嵌套相对布局问题

python - HTTPS GET 请求并读取 JSON 回复