Minidom - 提取子节点

时间:2017-02-10 10:16:45

标签: python xml minidom

我有一些XML:

<sentence id="1086415:2">
 <text>$6 and there is much tasty food, all of it fresh and continually refilled.</text>
  <Opinions>
   <Opinion to="31" from="27" polarity="positive" category="FOOD#STYLE_OPTIONS" target="food"/>
   <Opinion to="31" from="27" polarity="positive" category="FOOD#QUALITY" target="food"/>
   <Opinion to="31" from="27" polarity="positive" category="FOOD#PRICES" target="food"/>
  </Opinions>
</sentence>
<sentence id="1086415:3">
 <text>I am not a vegetarian but, almost all the dishes were great.</text>
  <Opinions>
   <Opinion to="48" from="42" polarity="positive" category="FOOD#QUALITY" target="dishes"/>
  </Opinions>

我试图提取Opinions标记中的所有内容,将其与元组中的文本结合起来。我想知道如何用minidom做到这一点?目前意见返回'\ n'。

from xml.dom import minidom
xmldoc = minidom.parse("ABSA16_Restaurants_Train_SB1_v2.xml")
sentences = xmldoc.getElementsByTagName("sentence")
for sentence in sentences:
   text = sentence.getElementsByTagName("text")[0].firstChild.data
   opinion = sentence.getElementsByTagName("Opinions")[0].firstChild.data

谢谢。

1 个答案:

答案 0 :(得分:0)

您确定需要string Url = "WebAddress1"; HtmlWeb web = new HtmlWeb(); HtmlDocument doc = web.Load(Url); foreach (var item in doc.DocumentNode.SelectNodes("//*[@id=\"pageContent\"]/ul[1]/li").Zip(doc.DocumentNode.SelectNodes("//*[@id=\"pageContent\"]/ul[1]/li/a"), (a, b) => new { A = a, B = b })) { var a = item.A; var b = item.B; ListBox1.Items.Add(a.InnerText); ListBox2.Items.Add(b.GetAttributeValue("href", "")); string Url2 = "WebAddress1" + b.GetAttributeValue("href", ""); HtmlWeb web2 = new HtmlWeb(); HtmlDocument doc2 = web2.Load(Url2); foreach (var item2 in doc2.DocumentNode.SelectNodes("//*[@id=\"pageContent\"]/article/div[4]/div[1]").Zip(doc2.DocumentNode.SelectNodes("//*[@id=\"pageContent\"]/article/h1"), (c, d) => new { C = c, D = d })) { var c = item2.C; var d = item2.D; ListBox3.Items.Add(c.InnerText); ListBox4.Items.Add(d.InnerText); } } 吗?

来自文档:

  

尚未熟悉DOM的用户应该考虑   使用xml.etree.ElementTree模块进行XML处理   代替。

如果没有充分的理由,不要浪费你的时间并使用标准的python minidom,它有足够的例子来解决你的任务。如果遇到麻烦,请随时在评论中提问。

更重要的是,如果您需要经常使用XML,我建议使用第三方xml.etree.ElementTree,它是功能更强大的工具,包含一些电池。