[英]How do I parse html elements from an observable array of objects in rxjs
在角度8中,我正在解析wordpress rss提要,并使用其属性之一“内容”来构建新闻滚动器。 使用来自node.js的rss-parser将rss feed处理为javascript对象。
我需要从(p)元素之间解析出一个http链接,一个图像和一些字符。 我的问题是我需要的数据包含在'content'属性中,我不知道编码或如何解析链接,图像和文本并将它们放入可观察范围内的变量中。
使用Angular和rxjs,我能够派生一个包含每个文章和所需属性的对象数组。 const http$ = this.api.rssSource$();
这是从有角度的api.service.ts获取提要并返回一个observable。 然后,使用以下代码将其映射到对象数组:
this.newsItems$ = http$ .pipe( map(res => Object.values(res['items'])));
我得到这20个项目的数组
(20) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
上面数组中的每个对象如下所示:
{content: "<a href="https://example.com/"><img width="300" height="200" src="https://example.com/some-image-300x200.jpeg" alt="blah blah blah" /></a><p>A lot of text about something and then something else</p><br /><p>jabber jabber and more jabber</p>↵<p><a href="https://example.com/example.html/" rel="nofollow">...Read More About Blah And Jabber</a></p>↵}
在有角度的模板中使用<div [innerHTML]="item.content"></div>
,我可以使用图像和大量文本来呈现html。 但是,它不是我想要的格式,需要缩短和重新排列。 我只需要完整的'a href =“ https:// xxx ...”','img src =“ http:// xxx ...”'和单个'p xxxx / p'。
如何访问该对象,以便可以进一步对其进行解析以填充newsLink,newsImg,shortDes的变量?
如果你希望做的是操纵发射阵列中的每个对象,你可以添加一个阵列map
的RxJS内部呼叫map
电话:
this.newsItems$ = http$.pipe(
map(res => Object.values(res['items']).map(item => {
// do item modification here
}))
);
这将返回修改后的数组。 另外,您可以拆分数组并将其作为单个值发出,然后RxJS map
它们以对其进行修改:
this.newsItems$ = http$.pipe(
switchMap(items => from(items)),
map(item => // manipulate individual items here)
);
至于实际的解析本身,可以使用正则表达式和match()
函数来实现:
arrayOfAnchorTags = item.content.match(/<\s*a[^>]*>(.*?)<\/\s*\s*a>/g);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.