я дал файл XSD, в Perl Enviroment и может использовать только XML::LibXML , XML::SAX, XML::Compile
Прикрепление метки или нескольких тегов в XML :: COMPILE :: SCHEMA
Соответствующая часть из XSD является
<complexType name="property">
<attribute type="propertyvalue" name="name" use="required"/>
<attribute type="string" name="value" use="required"/>
</complexType>
<simpleType name="propertyvalue">
<restriction base="string">
<enumeration value="propertya"/>
<enumeration value="propertyb"/>
[....some more values...]
</restriction>
</simpleType>
Я вам нужно написать несколько свойств для каждого значения. Как до сих пор, я работал с XML :: Compile :: Схемы
$schema->template('PERL', $type);
my $doc = XML::LibXML::Document->new('1.0', 'UTF-8');
my $write = $schema->compile(WRITER => $type, use_default_namespace => 1);
my %hash;
$hash = {
properties =>
{
version => 42,
property =>
[ {name => "propertya",
value => "example",
}, ],
}
};
my $xml= $write->($doc, $hash);
$doc->setDocumentElement($xml);
Моя проблема сейчас есть, я не могу видеть способ, как я могу добавить более одного свойства тега с somesing как
@properties =("propertya","propertyb",[.and so on.]);
foreach my $pname (@properties){
$hash = {
properties =>
{
version => 42,
property =>
[ {name => $pname;
value => "example",
}, ],
}
};
my $xml= $write->($doc, $hash);
$doc->setDocumentElement($xml);
}
без перезаписи всего или получения сообщений, которые отсутствуют в других частях файла. Есть ли способ сделать это, и есть ли способ прикреплять теги позже после выполнения my $xml = $write->($doc, $hash);
?
похоже, что свойство является анонимным массивом, содержащим анонимные хеши. Не могли бы вы использовать ваш цикл foreach для создания массива, а затем создать свой xml, предоставив ему ссылку на массив свойств? –