如何在节点值的开头使用Perl在XML中添加新的子节点

马埃

我试图XML::LibXML在Perl中使用节点值的开头将子元素添加到XML的节点中。我的XML是:

<root>
<book>
<title>
Test title for xml
</title>
<para n=1> para1 information </para>
<para n=2><head value="PARA HEADING"/>para2 information<subpara i=1>subpara Info</subpara><xyz/></para>
</book>
</root>

我想要的输出是:

<root>
<book>
<title>
Test title for xml
</title>
<para n=1><head value="PARA HEADING"/>para1 information </para>
<para n=2><head value="PARA HEADING"/>para2 information<subpara i=1><head value="PARA HEADING"/>Subpara Info</subpara><xyz/></para>
</book>
</root>

如果上面没有出现在'para'或'subpara'中,我想添加一个子节点'head'。

我已经试过这段代码:

#!/usr/local/bin/perl5.8.8

use XML::LibXML;

my $xml_parser = XML::LibXML->new();
my $xml_doc    = $xml_parser->parse_file( xml_file . xml );
my $root       = $xml_doc->getDocumentElement();
my $xml_xc     = XML::LibXML::XPathContext->new( $root );

my @array_list = ( para, deck );

foreach my $xml_sections ( $xml_xc->findnodes( '//*' ) ) {

    if ( $xml_sections->nodeName ne "head" ) {

        my $marker_flag = 0;

        foreach my $first_child ( $xml_sections->childNodes() ) {

            if ( $first_child->nodeName eq "head" ) {
                $marker_flag = 1;
                last;
            }
        }

        if ( !$marker_flag ) {

            foreach my $array_elt ( @array_list ) {

                if ( $array_elt eq $xml_sections->nodeName ) {
                    my $new_tag = $xml_doc->createElement( "head" );
                    my $value   = "PARA HEADING";
                    my $att1    = $xml_doc->createAttribute( "value", "$value" );
                    $new_tag->setAttributeNode( $att1 );
                    $xml_sections->addChild( $new_tag );
                }
            }
        }
    }
}

print $root->toString();

exit 0;

我的输出是:

<root>
<book>
<title>
Test title for xml
</title>
<para n=1>para1 information <head value="PARA HEADING"/></para>
<para n=2><head value="PARA HEADING"/>para2 information<subpara i=1>subpara Info<head value="PARA HEADING"/></subpara><xyz/></para>
</book>
</root>

我怎样才能做到这一点?

鲍罗丁

您让自己变得非常困难!例如,XML::LibXML::XPathContext除非您的XML数据具有非默认名称空间(示例中没有),否则无需参与另外,para和等subpara元素的属性值n=1应在其周围n="1"加上引号,给予

这是一个使用XPath表达式查找全部parasubpara元素,并用于exists检查每个元素是否已经有head孩子的解决方案。标量$head是使用您要插入的数据设置的,标称的副本将插入到找到的每个元素的第一个子元素之前

use strict;
use warnings;

use XML::LibXML;

my $parser = XML::LibXML->new;

my $doc = $parser->parse_fh(*DATA);

my $head = $parser->parse_balanced_chunk('<head value="PARA HEADING"/>');

for my $para ( $doc->findnodes('//para | //subpara') ) {
    if ( not $para->exists('head') ) {
        $para->insertBefore($head->cloneNode(1), $para->firstChild);
    }
}

print $doc;



__DATA__
<root>
<book>
<title>
Test title for xml
</title>
<para n="1"> para1 information </para>
<para n="2"><head value="PARA HEADING"/>para2 information<subpara i="1">subpara Info</subpara><xyz/></para>
</book>
</root>

输出

<?xml version="1.0"?>
<root>
<book>
<title>
Test title for xml
</title>
<para n="1"><head value="PARA HEADING"/> para1 information </para>
<para n="2"><head value="PARA HEADING"/>para2 information<subpara i="1"><head value="PARA HEADING"/>subpara Info</subpara><xyz/></para>
</book>
</root>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在XML的开头添加子节点

来自分类Dev

如何在xml中读取子节点

来自分类Dev

如何使用python将嵌套的子节点添加到xml文档中的父节点?

来自分类Dev

如何在单个链表的开头添加节点?

来自分类Dev

使用 DOMDocument 将新节点及其子节点添加到 XML 文档

来自分类Dev

使用xml在python中添加完整的xml作为xml节点的子节点

来自分类Dev

如何在sql中为xml的所有子节点添加属性

来自分类Dev

如何在MySql中将节点添加到xml值

来自分类Dev

如何使用XSLT转换添加子节点的XML?

来自分类Dev

如何在xslt中转换重复的xml节点并在新行中显示值

来自分类Dev

如何在XSL中为子节点添加属性?

来自分类Dev

如何在AgensGraph中向节点添加新属性?

来自分类Dev

如何在树角中添加新节点?

来自分类Dev

如何使用sql server在XML文档中获取包含具有给定属性值的子节点的节点?

来自分类Dev

如何使用Linq to XML获取XML的多个相同节点的子节点的值

来自分类Dev

在XML文件中添加新节点

来自分类Dev

在XML中添加新节点的问题

来自分类Dev

使用C#在XML节点内添加子节点

来自分类Dev

如何在minmax算法中获取子节点的值?

来自分类Dev

如何在SQL XPath中获取子节点值和父节点值

来自分类Dev

如何使用C#在xml中获取特定的子节点值

来自分类Dev

如何使用C#在xml文件中更改子节点的文本值

来自分类Dev

如何在现有节点内添加新节点?

来自分类Dev

使用Linq To Excel将子节点添加到XML中的节点

来自分类Dev

如何过滤 XML 文档中的 XML 节点及其子节点?

来自分类Dev

获取Groovy中XML节点的所有子节点的值

来自分类Dev

使用XML关联子节点和父节点的值

来自分类Dev

如何在android中从Firebase获取子节点的子节点?

来自分类Dev

如何在SQL Server中求和XML节点值

Related 相关文章

  1. 1

    在XML的开头添加子节点

  2. 2

    如何在xml中读取子节点

  3. 3

    如何使用python将嵌套的子节点添加到xml文档中的父节点?

  4. 4

    如何在单个链表的开头添加节点?

  5. 5

    使用 DOMDocument 将新节点及其子节点添加到 XML 文档

  6. 6

    使用xml在python中添加完整的xml作为xml节点的子节点

  7. 7

    如何在sql中为xml的所有子节点添加属性

  8. 8

    如何在MySql中将节点添加到xml值

  9. 9

    如何使用XSLT转换添加子节点的XML?

  10. 10

    如何在xslt中转换重复的xml节点并在新行中显示值

  11. 11

    如何在XSL中为子节点添加属性?

  12. 12

    如何在AgensGraph中向节点添加新属性?

  13. 13

    如何在树角中添加新节点?

  14. 14

    如何使用sql server在XML文档中获取包含具有给定属性值的子节点的节点?

  15. 15

    如何使用Linq to XML获取XML的多个相同节点的子节点的值

  16. 16

    在XML文件中添加新节点

  17. 17

    在XML中添加新节点的问题

  18. 18

    使用C#在XML节点内添加子节点

  19. 19

    如何在minmax算法中获取子节点的值?

  20. 20

    如何在SQL XPath中获取子节点值和父节点值

  21. 21

    如何使用C#在xml中获取特定的子节点值

  22. 22

    如何使用C#在xml文件中更改子节点的文本值

  23. 23

    如何在现有节点内添加新节点?

  24. 24

    使用Linq To Excel将子节点添加到XML中的节点

  25. 25

    如何过滤 XML 文档中的 XML 节点及其子节点?

  26. 26

    获取Groovy中XML节点的所有子节点的值

  27. 27

    使用XML关联子节点和父节点的值

  28. 28

    如何在android中从Firebase获取子节点的子节点?

  29. 29

    如何在SQL Server中求和XML节点值

热门标签

归档