首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SwiftSoup获取数组中的所有标记元素

使用SwiftSoup获取数组中的所有标记元素
EN

Stack Overflow用户
提问于 2022-01-12 20:10:54
回答 1查看 768关注 0票数 0

我在python中使用BeautifulSoup编写了一个项目,用于解析Html并向每个字符串中添加ruby和rt标记。最近,我为一个个人IOS应用程序做了一个类似的项目。我找到了类似的SwiftSoup,但在解析标记时遇到了问题,我可以使用BeautifulSoup出色地完成这个任务。在美丽的汤里,我能得到一个像下面这样的标签

代码语言:javascript
复制
<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,我能够将标记放入如下数组中

代码语言:javascript
复制
['\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标记。结果是

代码语言:javascript
复制
 <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的类似方法

代码语言:javascript
复制
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标记中的元素。我查看了文档,但没有看到任何关于将元素从标记中分离到数组中的信息。

这就是我想用斯威夫特汤实现的

代码语言:javascript
复制
['\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    ']

但最终会将所有内容作为数组中的一个元素,而不是单独的元素。

代码语言:javascript
复制
[<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解析器,可以实现同样的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-13 01:57:52

在查看了SwiftSoup文件之后,我找到了问题的答案。SwiftSoup有一个名为getChildNodes的方法,它允许您获取指定标记的所有内容。它返回标记内容的数组。希望这对同样面临类似问题的人有所帮助。

代码语言:javascript
复制
let soup:Document = try! SwiftSoup.parseBodyFragment(html)
let p : Elements = try! soup.select("p")
for j in p{
    print(try! j.getChildNodes())

}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70687808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档