如何在Perl中顺序打印XML Tag的属性数据和标签值?

Saumya

假设我有一个XML文档示例,

<root>
    <subnode1 att1="sn1att1" att2="sn1att2">Subnode 1</subnode1>    
    <subnode2 att1="sn2att1" att2="sn2att2">Subnode 2</subnode2>
    <subnode3 att1="sn3att1" att2="sn3att2">
        <subnode31 att1="sn31att1" att2="sn31att2">
            <subnode311 att1="sn311att1" att2="sn311att2">
                <subnode3111 att1="sn3111att1" att2="sn3111att2">Subnode 3-111</subnode3111>
            </subnode311>
        </subnode31>
        <subnode32 att1="sn32att1" att2="sn32att2">Subnode 3-2</subnode32>
    </subnode3>
</root>

我想打印这样的东西

sn1att1  sn1att2  Subnode 1
sn2att1  sn2att2  Subnode 2
sn3att1  sn3att2 
sn31att1  sn31att2 
sn311att1  sn311att2  
sn3111att1  sn3111att2  Subnode 3-111
sn32att1  sn32att2  Subnode 3-2

我在下面编写了代码,该代码能够按所述方式打印属性,但不能打印标签值(例如“子节点1”,“子节点2”等)。

use XML::XPath;
use XML::XPath::XMLParser;

my $xp = XML::XPath->new( filename => 'raw1.xml' );

for my $node ( $xp->findnodes('*/*') ) {

    print "\n" . $node->getName . "\t";

    for my $attribute ( $node->getAttributes ) {
        print " " . $attribute->getData;
    }

    for my $property ( $node->findnodes('.//*') ) {

        print "\n" . $property->getName . "\t";

        for my $attributes ( $property->getAttributes ) {
            print " " . $attributes->getData;
        }
    }

}
鲍罗丁

我想这就是你想要的

我不太熟悉XML::XPath,但是我知道XPath

看起来,对于XML中的每个元素,您都想打印一行,其中包含每个属性以及所有子文本节点(如果有)的值

这并不像看起来那样简单,因为任何元素都可能包含多个文本子元素,并散布着多个子元素

此代码将所有属性和所有非空白文本子级的值累加到数组中@line,如果结果不为空,则打印该行

我不明白为什么您要求的输出不包括我的行

sn32att1 sn32att2 Subnode 3-2

也许你会解释?

use strict;
use warnings 'all';

use XML::XPath;

my $xp = XML::XPath->new( filename => 'raw1.xml' );

# for all elements in the data
#
for my $node ( $xp->findnodes('//*') ) {

    my @line;

    # all the attributes of this element
    #
    for my $attr ( $node->getAttributes ) {
        push @line, $attr->getData;
    }

    # and all the non-blank child text nodes of this element
    #
    for ( $node->findnodes('text()') ) {
        my $text = $_->getData;
        push @line, $text if $text =~ /\S/;
    }

    # print it if there's anything to print
    #
    print "@line\n" if @line;
}

输出

sn1att1 sn1att2 Subnode 1
sn2att1 sn2att2 Subnode 2
sn3att1 sn3att2
sn31att1 sn31att2
sn311att1 sn311att2
sn3111att1 sn3111att2 Subnode 3-111
sn32att1 sn32att2 Subnode 3-2

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在XML中查找和替换属性值

来自分类Dev

如何确定核心数据中实体的属性数据类型?

来自分类Dev

如何在xml中添加属性值

来自分类Dev

在Perl中,如何按其(数字)值的顺序打印哈希键?

来自分类Dev

在maven或其他地方使用JAXB之后如何在XML中声明属性的顺序

来自分类Dev

如何在C#中使用反射获取方法的所有属性和属性数据

来自分类Dev

使用实体框架时如何在模型中写入属性数据库优先

来自分类Dev

Angular 2-如何将SVG属性数据绑定到组件属性?

来自分类Dev

XSLT:如何在XML中维护标签的顺序

来自分类Dev

如何在Perl中获取xml值?

来自分类Dev

如何在perl中打印输出的最后一个值?

来自分类Dev

WP All Export for Wordpress:如何使用if,elseif条件获取和更改属性数据

来自分类Dev

使用WooCommerce API检索产品属性数据和值

来自分类Dev

tableView中的CoreData清除和属性数据

来自分类Dev

导出默认属性数据中的vuex状态...可能吗?

来自分类Dev

使用带有C#的XmlDocument读取XML数据-读取属性数据并拆分结果

来自分类Dev

Xaml中的公共属性数据绑定失败

来自分类Dev

使用beautifulsoup获取多个标签和属性数据

来自分类Dev

如何获取一个特定部分下的li标签属性数据

来自分类Dev

使用实体框架时如何在模型中写入属性数据库优先

来自分类Dev

如何在Perl中编写算法以从两个文件中读取数据并匹配并打印查询

来自分类Dev

输入标签值属性未显示双引号中的数据

来自分类Dev

基于Java中属性数据的对象的订单清单

来自分类Dev

查找名为“标签”的元素和名为“标题”的属性的XML值

来自分类Dev

如何从链接标签获取数据属性值?

来自分类Dev

属性值无效,属性数据未知

来自分类Dev

如何在Perl中顺序打印XML Tag的属性数据和标签值?

来自分类Dev

XSLT:如何在XML中维护标签的顺序

来自分类Dev

在 XPATH 中包含()标签名称和属性值

Related 相关文章

  1. 1

    如何在XML中查找和替换属性值

  2. 2

    如何确定核心数据中实体的属性数据类型?

  3. 3

    如何在xml中添加属性值

  4. 4

    在Perl中,如何按其(数字)值的顺序打印哈希键?

  5. 5

    在maven或其他地方使用JAXB之后如何在XML中声明属性的顺序

  6. 6

    如何在C#中使用反射获取方法的所有属性和属性数据

  7. 7

    使用实体框架时如何在模型中写入属性数据库优先

  8. 8

    Angular 2-如何将SVG属性数据绑定到组件属性?

  9. 9

    XSLT:如何在XML中维护标签的顺序

  10. 10

    如何在Perl中获取xml值?

  11. 11

    如何在perl中打印输出的最后一个值?

  12. 12

    WP All Export for Wordpress:如何使用if,elseif条件获取和更改属性数据

  13. 13

    使用WooCommerce API检索产品属性数据和值

  14. 14

    tableView中的CoreData清除和属性数据

  15. 15

    导出默认属性数据中的vuex状态...可能吗?

  16. 16

    使用带有C#的XmlDocument读取XML数据-读取属性数据并拆分结果

  17. 17

    Xaml中的公共属性数据绑定失败

  18. 18

    使用beautifulsoup获取多个标签和属性数据

  19. 19

    如何获取一个特定部分下的li标签属性数据

  20. 20

    使用实体框架时如何在模型中写入属性数据库优先

  21. 21

    如何在Perl中编写算法以从两个文件中读取数据并匹配并打印查询

  22. 22

    输入标签值属性未显示双引号中的数据

  23. 23

    基于Java中属性数据的对象的订单清单

  24. 24

    查找名为“标签”的元素和名为“标题”的属性的XML值

  25. 25

    如何从链接标签获取数据属性值?

  26. 26

    属性值无效,属性数据未知

  27. 27

    如何在Perl中顺序打印XML Tag的属性数据和标签值?

  28. 28

    XSLT:如何在XML中维护标签的顺序

  29. 29

    在 XPATH 中包含()标签名称和属性值

热门标签

归档