Python 获取XML元素的值
在下面的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解析器以字符串形式返回node的值,该字符串应返回
This is my first web page<br/><p>test123</p><p>How exciting</p>
XML解析器当然“吞咽”了内部元素,因为它们是完全有效的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>