我在python中使用BeautifulSoup编写了一个项目,用于解析Html并向每个字符串中添加ruby和rt标记。最近,我为一个个人IOS应用程序做了一个类似的项目。我找到了类似的SwiftSoup,但在解析标记时遇到了问题,我可以使用BeautifulSoup出色地完成这个任务。在美丽的汤里,我能得到一个像下面这样的标签
<p id="p6" data-pid="6" data-rel-pid="[41]" class="p6">
<span class="parNum" data-pnum="1"></span>
This is a(<span id="citationsource2"></span><a epub:type="noteref" href="#citation2">link</a>)to some website。
</p>通过使用来自.content的BS4,我能够将标记放入如下数组中
['\n', <span class="parNum" data-pnum="1"></span>, '\n This is a(', <span id="citationsource2"></span>, <a epub:type="noteref" href="#citation2">link</a>, ')to some website。\n ']在我遍历数组之后,检查子标记是否包含文本,或者数组中的元素是否是text元素,我只是附加了ruby标记。结果是
<p id="p6" data-pid="6" data-rel-pid="[41]" class="p6">
<span class="parNum" data-pnum="1"></span>
<ruby>This<rt>1</rt></ruby><ruby>is<rt>2</rt></ruby> <ruby>a<rt>3</rt></ruby>(<span id="citationsource2"></span><a epub:type="noteref" href="#citation2"><ruby>link<rt>4</rt></ruby></a>)<ruby>to<rt>5</rt></ruby> <ruby>some<rt>6</rt></ruby> <ruby>website<rt>7</rt></ruby>。
</p>使用SwiftSoup,我解析文档,因为它没有类似于BS4 .content的类似方法
let soup:Document = try! SwiftSoup.parse(html)
let elements:Elements = try! soup.select("p")
for j in try! elements.html(){
print(try! j)
//Doesn't work prints out every single character not every element
}问题是,它将p标记的整个内容作为一个元素来处理,而不是像BS4那样分离p标记中的元素。我查看了文档,但没有看到任何关于将元素从标记中分离到数组中的信息。
这就是我想用斯威夫特汤实现的
['\n', <span class="parNum" data-pnum="1"></span>, '\n This is a(', <span id="citationsource2"></span>, <a epub:type="noteref" href="#citation2">link</a>, ')to some website。\n ']但最终会将所有内容作为数组中的一个元素,而不是单独的元素。
[<span class="parNum" data-pnum="1"></span>This is a(<span id="citationsource2">
</span> <a epub:type="noteref" href="#citation2">link</a>)to some website.]是否有任何方法来实现这一点,使用迅捷汤或另一个快捷的html解析器,可以实现同样的事情?
发布于 2022-01-13 01:57:52
在查看了SwiftSoup文件之后,我找到了问题的答案。SwiftSoup有一个名为getChildNodes的方法,它允许您获取指定标记的所有内容。它返回标记内容的数组。希望这对同样面临类似问题的人有所帮助。
let soup:Document = try! SwiftSoup.parseBodyFragment(html)
let p : Elements = try! soup.select("p")
for j in p{
print(try! j.getChildNodes())
}}https://stackoverflow.com/questions/70687808
复制相似问题