我有以下要创建的XML,并通过Perl脚本填充数据。在这个XML中,我有一些集合类型的属性,即primarySiteCollection。
如何动态填充和生成'primarySiteCollection'节点。 在这个XML中,primarySiteCollection包含3个组织位点,但可以有1个或多个。
<TumorDetails>
<personUpi>String</personUpi>
<ageAtDiagnosis>3.14159E0</ageAtDiagnosis>
<biopsyPathologyReportSummary>String</biopsyPathologyReportSummary>
<primarySiteCollection>
<tissueSite>
<description>String1</description>
<name>String1</name>
</tissueSite>
<tissueSite>
<description>String2</description>
<name>String2</name>
</tissueSite>
<tissueSite>
<description>String3</description>
<name>String3</name>
</tissueSite>
</primarySiteCollection>
</TumorDetails>
这是我的Perl脚本。 我想生成包含属性集合类型的动态节点。
use strict;
use warnings;
use XML::Compile::Schema;
my $node = {
personUpi => 'String',
ageAtDiagnosis => '3.14159E0',
biopsyPathologyReportSummary => 'String',
primarySiteCollection => {
tissueSite => {
description => 'String',
name => 'String',
},
},
};
my $schema = XML::Compile::Schema->new('sample.xsd');
my $writer = $schema->compile(WRITER => 'TumorDetails');
my $doc = XML::LibXML::Document->new(q(1.0), q(UTF-8));
print $writer->($doc, $node)->toString;
答案 0 :(得分:2)
我认为这很简单,可以安全地使用XML::Simple。如果它复杂得多,并且您必须处理从对象派生的复杂数据类型,那么架构将非常有用。但为此,XML :: Simple将会这样做。
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
my $tissueSite = [
{
description => 'String',
name => 'String',
},
{
description => 'String2',
name => 'String2',
},
];
my $data = {
tumorDetails => {
personUpi => 'String',
ageAtDiagnosis => '3.14159E0',
biopsyPathologyReportSummary => 'String',
primarySiteCollection => {
tissueSite => $tissueSite,
},
},
};
print XMLout($data, KeepRoot => 1, noAttr => 1 );
您可以向$tissueSite
添加更多哈希值。
请记住,如果它变得更复杂,另一种方法更适合。
答案 1 :(得分:0)
我按照上面的方法,工作正常。
但是如果我不知道$ tissueSite的大小(它将具有的哈希数量?)该怎么办?它可以扩展/缩小到任何大小。
假设我在数组中收集它们:@decription和@names根据用户输入。
是否可以使用上述两个数组的运行时值创建$ tissueSite?