【发布时间】:2018-10-10 06:07:37
【问题描述】:
在以下数据文件中,我想将每个 <Field> 标签视为 <Register> 的子标签,并将每个 <Register> 视为 <Partition> 的子标签。所以,基本上,我试图用相应的<Register> 和<Field> 提取每个<Partition> 细节。由于所有这些标签都是独立的,而不是父子关系,我怎样才能得到我想要的输出?
由于文件非常大,我不想让它成为父子关系,因为它需要查找/替换和手动干预。
<Partition>
<Name>1</Name>
<Abstract>2</Abstract>
<Description>3</Description>
<ParentName>4</ParentName>
</Partition>
<Partition>
<Name>8</Name>
<Abstract></Abstract>
<Description>9</Description>
<ParentName>10</ParentName>
</Partition>
<Register>
<Name>12</Name>
<Abstract></Abstract>
<Description>13</Description>
<ParentName>14</ParentName>
<Size>32</Size>
<AccessMode>15</AccessMode>
<Type>16</Type>
</Register>
<Field>
<Name>17</Name>
<Abstract></Abstract>
<Description></Description>
<ParentName></ParentName>
</Field>
<Field>
.
.
.
</Field>
<Register>
.
.
.
</Register>
<Field>
.
.
.
</Field>
<Field>
.
.
.
</Field>
<Partition>
<Name>88</Name>
<Abstract></Abstract>
<Description></Description>
<ParentName>55</ParentName>
</Partition>
<Register>
.
.
.
</Register>
<Field>
.
.
.
</Field>
<Partition>
.
.
.
</Partition>
<Partition>
.
.
.
</Partition>
<Partition>
.
.
.
</Partition>
<Register>
.
.
.
</Register>
我正在使用XML::Twig 包,这是我的代码 sn-p:
foreach my $register ( $twig->get_xpath('//Register') ) # get each <Register>
{
#print $register, "\n";
my $reg_name = $register->first_child('Name')->text;
my $reg_abstract= $register->first_child('Abstract')->text;
my $reg_description= $register->first_child('Description')->text;
.
.
.
foreach my $xml_field ($register->get_xpath('Field'))
{
my $reg_field_name= $xml_field->first_child('Name')->text;
my $reg_field_abstract= $xml_field->first_child('Abstract')->text;
#print "$reg_field_name \n";
.
.
.
}
}
【问题讨论】:
-
我同意他们应该是孩子,但他们不是。再多的“考虑”(无论这意味着什么)都不会改变这一事实。兄弟姐妹不是孩子,不就是用
next_sibling代替first_child吗? -
正如 ikegami 所说,
Register和Field不是Partition的孩子。另外,您似乎无论如何都将整个文件加载到内存中。如果文件真的很大,你可以做的是在所有 3 个标签上设置twig_handlers,根据当前元素和前一个元素输出/存储信息,并在找到新的 @ 时清除树987654337@。请注意,如果没有适当的测试数据,很难为您提供代码示例(特别是我想知道父/子关系是否不应由ParentName元素而不是 XML 中元素的位置来定义) -
这是个好主意。如何将此文件重写为父子关系?
标签: perl xml-parsing xml-twig