【发布时间】:2018-08-20 13:45:06
【问题描述】:
这是我在这里的第一个问题。通常我可以找到我需要的东西,但经过一周的搜索和尝试,我还是在同一个地方,所以我需要你的帮助。
我有一本书是一个超过 6000 行的大型 XML 文件。我需要做的是获取一个元素<sec> 并将其内容放在一个字符串中。有时该元素只有一个段落,有时它有更多,有时段落有列表和其他内容,我需要将所有内容捕获在一个字符串中。
这是一个如何格式化书籍的示例。
<book>
<book-body>
<book-part id="ch01" book-part-type="chapter">
<book-part-meta>
<title-group>
<label><target target-type="page" id="pg1"/>Chapter 1</label>
<title>Some Title</title>
</title-group>
</book-part-meta>
<body>
<sec id="ch01lev1sec1" disp-level="level1">
<title>Introduction</title>
<p>This is a <em>paragraph</em></p>
<p>This is second paragraph
<list list-type="bullet">
<list-item><p>List Item 1</p></list-item>
<list-item><p>List Item 2</p></list-item>
<list-item><p>List Item 3</p></list-item>
</list>
</p>
</sec>
</body>
</book-part>
</book-body>
</book>
从这个例子中,我需要标签内的所有东西(最好没有标题,但我稍后会弄清楚)。 我曾尝试使用“xml.etree.ElementTree”,并使用“minidom”但未成功。
这是我使用 minidom 的代码示例
from xml.dom import minidom
xmldoc = minidom.parse("xCHES.xml")
book = xmldoc.getElementsByTagName("book")[0]
sec = book.getElementsByTagName("sec")
当我列出一些元素时,我得到的数字与我在 xml 文件中搜索“<sec”时的数字相同,所以我想我得到了所有元素。
在这一点之后,我被卡住了,我找不到如何将所有内容提取为文本的方法。
“ElementTree”也是如此,我可以找到所有 <sec> 元素,但无法提取文本,或者仅提取其中的一小部分。
所以如果有人能帮我解决这个问题,那就太好了。什么方法都无所谓,只要能完成就行。
编辑: 期望的输出是
<title>Introduction</title>
<p>This is a <em>paragraph</em></p>
<p>This is second paragraph
<list list-type="bullet">
<list-item><p>List Item 1</p></list-item>
<list-item><p>List Item 2</p></list-item>
<list-item><p>List Item 3</p></list-item>
</list>
</p>
但作为一个刺痛。这可以在一行中,格式无关紧要。
谢谢你:)
【问题讨论】:
-
使用这个例子,期望的输出是什么样的?
-
如果您没有指定预期的输出,没有人可以回答您的问题。注意:“将所有内容提取为文本”不是一个有用的规范(xml 已经是文本)。
-
感谢您指出我的错误问题格式。我已经添加了有问题的预期结果。