Perl 如何在两个元素之间添加空白?

Perl 如何在两个元素之间添加空白?,perl,xml-twig,Perl,Xml Twig,我不熟悉XMLTwig,如何在XMLTwig中的两个元素之间添加空间 输入: <xml> <fig id="fig6_4"> <label><xref ref-type="page" id="page_54"/>[Figure 4]</label> <caption>The Klein Sexual Orientation Grid</caption> </fig> </xml> 输出:

我不熟悉XMLTwig,如何在XMLTwig中的两个元素之间添加空间

输入:

<xml>
<fig id="fig6_4">
<label><xref ref-type="page" id="page_54"/>[Figure 4]</label>
<caption>The Klein Sexual Orientation Grid</caption>
</fig>
</xml>
输出:

<xml>
<fig id="fig6_4">
[Figure 4] <caption>The Klein Sexual Orientation Grid</caption>
</fig>
</xml>

[图4]克莱因性取向网格
我需要:

<xml>
    <fig id="fig6_4">
    <xref ref-type="page" id="page_54"/>[Figure 4] <caption>The Klein Sexual Orientation Grid</caption>
    </fig>
    </xml>

[图4]克莱因性取向网格

如何在两个元素之间插入空格…

我不清楚具体目标是什么-您的输出数据格式看起来不太理想。尽管如此,下面的例子应该足以让你上路。它涉及两点:

  • 当前输出中缺少该“外部参照”
  • 如何向文档中添加任意空白(基本上是PCDATA内容)
  • 附带说明:我以前没有使用过XML::Twig;如果您熟悉XML概念,那么这个方法实际上非常好

    使用严格;
    使用警告;
    使用XML::Twig;
    my$twig=XML::twig->new(
    细枝处理程序=>{
    '图'=>\&图
    },
    漂亮的打印=>“缩进”,
    );
    $twig->parse(do{local$/;});
    $twig->print;
    子图形{
    我的($twig,$figure)=@;
    #查找类型标签的所有子项(是否真的有超过1??)
    foreach my$label($figure->children('label')){
    #将标签替换为其子节点
    $label->replace_为($label->cut_子项);
    #找到标题并在其前面放置4个空格
    如果(我的$caption=$figure->first_child('caption')){
    我的$some_whitespace=XML::Twig::Elt->new(“#PCDATA”=>”);
    $some_空格->粘贴(在=>$caption之前);
    }
    }
    }
    __资料__
    [图4]
    克莱因性取向网格
    
    我不清楚具体目标是什么-您的输出数据格式看起来并不特别理想。尽管如此,下面的例子应该足以让你上路。它涉及两点:

  • 当前输出中缺少该“外部参照”
  • 如何向文档中添加任意空白(基本上是PCDATA内容)
  • 附带说明:我以前没有使用过XML::Twig;如果您熟悉XML概念,那么这个方法实际上非常好

    使用严格;
    使用警告;
    使用XML::Twig;
    my$twig=XML::twig->new(
    细枝处理程序=>{
    '图'=>\&图
    },
    漂亮的打印=>“缩进”,
    );
    $twig->parse(do{local$/;});
    $twig->print;
    子图形{
    我的($twig,$figure)=@;
    #查找类型标签的所有子项(是否真的有超过1??)
    foreach my$label($figure->children('label')){
    #将标签替换为其子节点
    $label->replace_为($label->cut_子项);
    #找到标题并在其前面放置4个空格
    如果(我的$caption=$figure->first_child('caption')){
    我的$some_whitespace=XML::Twig::Elt->new(“#PCDATA”=>”);
    $some_空格->粘贴(在=>$caption之前);
    }
    }
    }
    __资料__
    [图4]
    克莱因性取向网格
    
    我会在
    fig/label
    上使用处理程序,因为这是唯一需要修改的元素。然后,处理程序中的代码需要在元素后面加上空格,然后删除标记:

    XML::Twig->new( twig_handlers => { 'fig/label' => sub { $_->suffix( ' ')->erase; }});
    

    我会在
    fig/label
    上使用处理程序,因为这是唯一需要修改的元素。然后,处理程序中的代码需要在元素后面加上空格,然后删除标记:

    XML::Twig->new( twig_handlers => { 'fig/label' => sub { $_->suffix( ' ')->erase; }});
    

    空白在XML中不相关。你到底想做什么?如果你说的是缩进,你有没有看过“漂亮的打印”选项?是的,不相关,但我需要在两个元素之间插入空格。如何插入空格或添加?@Jack:事实上,空格在XML(但不是HTML)中具有重要的技术意义。有时,能够使用换行符和制表符存储文本并使它们在往返过程中幸存下来是很有用的:-)空白在XML中是不相关的。你到底想做什么?如果你说的是缩进,你有没有看过“漂亮的打印”选项?是的,不相关,但我需要在两个元素之间插入空格。如何插入空格或添加?@Jack:事实上,空格在XML(但不是HTML)中具有重要的技术意义。有时,能够使用换行符和制表符存储文本并使它们在往返过程中幸存下来是很有用的:-)我现在肯定要开始更多地使用XML::Twig。那真是太优雅了!谢谢Twig的威力和诅咒在于有大量的方法,这些方法使做很多事情变得简单。。。如果你还记得的话,我现在肯定会更多地使用XML::Twig。那真是太优雅了!谢谢Twig的威力和诅咒在于有大量的方法,这些方法使做很多事情变得简单。。。如果你还记得的话。