Python 获取XML元素的值

Python 获取XML元素的值,python,perl,Python,Perl,在下面的XML示例中,如何获取元素的值?在本例中,我希望XML解析器以字符串形式返回node的值,该字符串应返回 This is my first web page<br/><p>test123</p><p>How exciting</p> XML解析器当然“吞咽”了内部元素,因为它们是完全有效的XML 要么: 修复编码的XML—如果HTML标记不应该是文档结构的一部分,那么应该对它们进行适当的编码 找到所需内容的根节点,然后重新序列

在下面的XML示例中,如何获取
元素的值?在本例中,我希望XML解析器以字符串形式返回node的值,该字符串应返回

This is my first web page<br/><p>test123</p><p>How exciting</p>

XML解析器当然“吞咽”了内部元素,因为它们是完全有效的XML

要么:

  • 修复编码的XML—如果HTML标记不应该是文档结构的一部分,那么应该对它们进行适当的编码
  • 找到所需内容的根节点,然后重新序列化XML以生成文本
  • 这里有一个快速的解决方案

    #!/usr/bin/perl -Tw
    
    use strict;
    use warnings;
    use XML::LibXML;
    
    my $dom = XML::LibXML->load_xml(string => <<'EOT');
    <dataset>
    <data>
    This is my first web page<br/>
    <p>test123</p>
    <p>How exciting</p>
    </data>
    </dataset>
    EOT
    
    my @nodes = $dom->findnodes('/dataset/data');
    
    my $xml_text = $nodes[0]->serialize();
    
    # strip <data> and </data> if you don't want them
    $xml_text =~ s{(?: \A <data> | </data> \z )}{}xmsg;
    
    print $xml_text;
    
    #/usr/bin/perl-Tw
    严格使用;
    使用警告;
    使用XML::LibXML;
    my$dom=XML::LibXML->load_XML(string=>serialize();
    #脱光衣服,如果你不想要的话
    $xml_text=~s{(?:\A |\z)}{}xmsg;
    打印$xml_文本;
    
    使用python的cElementTree库

    In [23]: import xml.etree.cElementTree as et
    
    In [24]: myxml="""<dataset>
        ...: <data>
        ...: This is my first web page<br/>
        ...: <p>test123</p>
        ...: <p>How exciting</p>
        ...: </data>
        ...: </dataset>"""
    
    In [25]: page = et.fromstring(myxml)
    
    In [26]: for elem in page.getiterator():
        ...:     if elem.tag=='data':
        ...:         print elem.tag, elem.text
        ...:         for tags in elem.getchildren():
        ...:             print tags.tag, tags.text
        ...:             
    data 
    This is my first web page
    br None
    p test123
    p How exciting
    
    In [27]: 
    
    [23]中的
    :将xml.etree.cElementTree作为et导入
    在[24]:myxml=“”
    ...: 
    …:这是我的第一个网页
    …:test123

    多么令人兴奋啊

    ...: ...: """ 在[25]中:page=et.fromstring(myxml) 在[26]中:对于page.getiterator()中的元素: …:如果elem.tag=='data': …:打印elem.tag,elem.text …:对于elem.getchildren()中的标记: …:打印tags.tag,tags.text ...: 资料 这是我的第一个网页 无 p测试123 多令人兴奋啊 在[27]中:
    注意:如果您使用的是python 2.7;那么请使用
    list(elem)
    而不是
    elem.getchildren()
    page.iter()
    而不是
    page.getiterator()
    此外,您还可以执行
    elem.attrb
    以获取xml节点属性的dict,并执行
    elem.tail
    以获取其尾部;

    这个模块太简单了,留给程序员很多工作要做。我还没试过 但我会鼓励你使用其中任何一种 或 , 它们都经过了尝试和测试,能够处理完整XML规范的所有复杂性

    此解决方案使用
    XML::Twig
    ,只需解析数据,查找
    元素并打印其内容

    use strict;
    use warnings;
    
    use XML::Twig;
    
    my $twig = XML::Twig->new;
    $twig->parse(\*DATA);
    
    my ($data) = $twig->get_xpath('/dataset/data');
    print $data->xml_string;
    
    __DATA__
    <dataset>
    <data>
    This is my first web page<br/>
    <p>test123</p>
    <p>How exciting</p>
    </data>
    </dataset>
    
    使用严格;
    使用警告;
    使用XML::Twig;
    my$twig=XML::twig->new;
    $twig->parse(\*数据);
    my($data)=$twig->get_xpath('/dataset/data');
    打印$data->xml\u字符串;
    __资料__
    这是我的第一个网页
    测试123

    多么令人兴奋

    输出

    This is my first web page<br/><p>test123</p><p>How exciting</p>
    
    这是我的第一个网页
    test123

    多么激动人心


    $nodes[0]->textContent在结果中不包含XML。看起来OP需要“innerHTML”进行XML解析。
    This is my first web page<br/><p>test123</p><p>How exciting</p>