- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个网站,正在从我的网站收到一个巨大的XML文件。
我需要将其解析为Dart中的2个类。
XML(部分):
<fb-updates xmlns:l="https://www.w3.org/1999/xlink" timestamp="2018-04-19 11:33:14">
<updated-book id="32498526" created="2018-04-18 16:35:49" last_release="2018-04-18 16:35:49" updated="2018-04-18 16:35:49" valid_till="2018-12-31" valid_from="2013-01-01" size="579411" sent_by_name="nvcvet@gmail.com" sent_by_id="9351951" must_import="0" options="0" price="0.90" you_can_sell="0" allow_read="0" allow_sell="0" has_trial="0" allow_full_free="0" public_domain="0" show_card="0" contract_author="9339265" contract_title="АСТ" subject_id="44580" external_id="b4854f32-430a-11e8-9a05-0cc47a52085c" cover="jpg" type="0" adult="16" file_parts="6" available="-1" available_date="2018-04-18 16:18:02" copyright_read_online="1" contract_ends="2018-12-31" udk="821.111-312.4" art_cover="jpg" lvl="2" sell_open="0" can_preorder="0" litex="1" chars="46369" images="1" drm="0" publisher="АСТ" date_written_s="1969" date_written_d="1969-01-01" lang="ru" src_lang="en" cover_h="1960" cover_w="1400" art_cover_w="1400" art_cover_h="1960" lang3="rus" src_lang3="eng" status="approved" rating="6030" url="" inapp_price="0.90">
<files>
<file size="579409" type="fb2.zip"/>
<file size="51846" type="html"/>
<file size="583471" type="html.zip"/>
<file size="47604" type="txt"/>
<file size="20832" type="txt.zip"/>
<file size="623059" type="rtf.zip"/>
<file size="663336" type="a4.pdf"/>
<file size="708752" type="a6.pdf"/>
<file size="447161" type="mobi.prc"/>
<file size="1474324" type="epub"/>
<file size="590189" type="ios.epub"/>
<file size="578047" type="fb3"/>
</files>
<book-title title="Наследство Боксдейла"/>
<annotation>
<p>
«– Видишь ли, мой дорогой Адам, – мягко объяснял каноник, прохаживаясь с главным суперинтендентом Дэлглишем под вязами возле своего пасторского дома, – как бы нам ни было кстати это наследство, оно не принесет мне радости, если моя приемная бабушка Элли получила в свое время эти деньги недостойным способом.
</p>
<p>
Каноник имел в виду, что они с женой не смогут воспользоваться пятьюдесятью тысячами фунтов, оставленными им его приемной бабушкой Элли, если шестьдесят семь лет назад она отравила своего престарелого мужа мышьяком, чтобы получить их. Поскольку в 1902 году это обвинение было снято с тетушки Элли судом, который, по мнению ее хемпширских соседей, в качестве публичного зрелища мог состязаться с церемонией коронации, щепетильность каноника казалась не совсем уместной…»
</p>
</annotation>
<authors>
<author id="dc3b5610-2a80-102a-9ae1-2dfe723fe7c7">
<subject_id>44580</subject_id>
<url>fillis-dzheyms/</url>
<first-name>Филлис Дороти</first-name>
<middle-name/>
<last-name>Джеймс</last-name>
<full-name-rodit>Филлис Дороти Джеймс</full-name-rodit>
<lvl>2</lvl>
<relation>0</relation>
</author>
<author id="e4f1d9b0-2a80-102a-9ae1-2dfe723fe7c7">
<subject_id>44696</subject_id>
<url>i-doronina/</url>
<first-name>Ирина</first-name>
<middle-name>Яковлевна</middle-name>
<last-name>Доронина</last-name>
<full-name-rodit>Ирины Дорониной</full-name-rodit>
<lvl>1</lvl>
<relation>1</relation>
</author>
<author id="c9a05514-1ce6-11e2-86b3-b737ee03444a">
<subject_id>2835185</subject_id>
<url>raznoe-4/</url>
<first-name>Литагент</first-name>
<middle-name/>
<last-name>АСТ</last-name>
<full-name-rodit/>
<lvl>2</lvl>
<relation>2</relation>
</author>
</authors>
<genres>
<genre title="зарубежные детективы" id="5219" bisac="FIC022000" master="1"/>
<genre title="классические детективы" id="5261" bisac="FIC022000"/>
</genres>
<relations>
<related uuid="BA8F3184-9049-4EAF-A47B-9D711D9135DC" relation="6" type="0"/>
</relations>
<copyrights>
<copyright id="9339265" title="АСТ" percent="100.00"/>
</copyrights>
<livelib livelib_id="1001260109" rating="7.263" avg_mark="3.8246" count_readers="2271" widget_url="book/1100906/ratingbutton2015.png" widget_url2="book/1100906/ratingbuttonwhite.png" mark_1="2" mark_2="5" mark_3="48" mark_4="78" mark_5="885"/>
</updated-book>
<updated-book id="32523047" created="2018-04-19 09:14:23" last_release="2018-04-19 09:14:23" updated="2018-04-19 09:14:23" valid_till="2021-11-01" valid_from="2016-11-01" size="5653231" sent_by_name="sabanova" sent_by_id="9355626" must_import="0" options="68" price="5.99" you_can_sell="0" allow_read="0" allow_sell="0" has_trial="0" allow_full_free="0" public_domain="0" show_card="64" contract_author="9356032" contract_title="Эксмо" subject_id="44790" external_id="0a6e477f-4398-11e8-aa6b-0cc47a520474" cover="jpg" type="1" adult="0" file_parts="0" available="-1" available_date="2018-04-19 09:11:16" copyright_read_online="0" contract_ends="2021-02-12" art_cover="jpg" lvl="4" sell_open="0" can_preorder="0" litex="0" chars="4368" drm="0" publisher="" lang="ru" cover_h="1500" cover_w="1071" art_cover_w="1071" art_cover_h="1500" lang3="rus" status="approved" url="" inapp_price="5.99">
<files>
<group value="Ознакомительный фрагмент. MP3" group_id="1">
<file id="37754271" size="5653231" filename="Sample.mp3" seconds="4368" mime_type="audio/mpeg" file_description="MP3"/>
</group>
<group value="Стандартное качество. MP3" group_id="5">
<file id="37754255" size="5669432" filename="01.mp3" seconds="354" mime_type="audio/mpeg" file_description="MP3"/>
<file id="37754231" size="14099251" filename="02.mp3" seconds="880" mime_type="audio/mpeg" file_description="MP3"/>
<file id="37754263" size="11474467" filename="03.mp3" seconds="716" mime_type="audio/mpeg" file_description="MP3"/>
<file id="37754215" size="5472573" filename="04.mp3" seconds="341" mime_type="audio/mpeg" file_description="MP3"/>
<file id="37754239" size="24781451" filename="05.mp3" seconds="1548" mime_type="audio/mpeg" file_description="MP3"/>
<file id="37754247" size="8470594" filename="06.mp3" seconds="529" mime_type="audio/mpeg" file_description="MP3"/>
</group>
<group value="Мобильная версия. MP4" group_id="19">
<file id="37754223" size="31707503" filename="Sovetnik_Po_Kulture.m4b" seconds="4366" mime_type="audio/m4b" file_description="M4B-файл"/>
</group>
</files>
<book-title title="Советник по культуре"/>
<annotation>
<p>
Николай Стверцов прибыл на планету Ниона в качестве советника по культуре посольства Земной Федерации. Он должен сыграть важную роль в межгалактическом проекте «Восхождение». Проект призван помочь пяти расам Нионы достичь более высокого уровня развития. Но, узнав о страшной тайне изготовления шейота, который является главным предметом экспорта с отсталой планеты, Стверцов начинает сомневаться в правильности политики Земной Федерации на Нионе…
</p>
</annotation>
<authors>
<author id="ea92d3b4-2a80-102a-9ae1-2dfe723fe7c7">
<subject_id>44790</subject_id>
<url>aleksey-kalugin/</url>
<first-name>Алексей</first-name>
<middle-name>Александрович</middle-name>
<last-name>Калугин</last-name>
<full-name-rodit>Алексея Калугина</full-name-rodit>
<lvl>4</lvl>
<relation>0</relation>
<exid>1-00000025829</exid>
</author>
<author id="556f2637-8bde-11e6-9c73-0cc47a1952f2">
<subject_id>10117645</subject_id>
<url>audioagent-litres-chtec-pablik/</url>
<first-name>Аудиоагент</first-name>
<middle-name/>
<last-name>ЛитРес Чтец</last-name>
<full-name-rodit>Аудиоагента ЛитРес Чтец</full-name-rodit>
<lvl>1</lvl>
<relation>2</relation>
</author>
<author id="a4d115a3-a4f2-11e6-a11d-0cc47a5203ba">
<subject_id>10389074</subject_id>
<url>raznoe-10389074/</url>
<first-name>Аудиоагент</first-name>
<middle-name/>
<last-name>1 редакция-прямой договор</last-name>
<full-name-rodit/>
<lvl>1</lvl>
<relation>2</relation>
</author>
<author id="f703f2a3-24cc-11e7-b088-0cc47a52085c">
<subject_id>11119920</subject_id>
<url>dumanskiy-andrey/</url>
<first-name>Андрей</first-name>
<middle-name/>
<last-name>Думанский</last-name>
<full-name-rodit>Думанского Андрея</full-name-rodit>
<lvl>1</lvl>
<relation>2</relation>
</author>
<author id="f703f2a3-24cc-11e7-b088-0cc47a52085c">
<subject_id>11119920</subject_id>
<url>dumanskiy-andrey/</url>
<first-name>Андрей</first-name>
<middle-name/>
<last-name>Думанский</last-name>
<full-name-rodit>Думанского Андрея</full-name-rodit>
<lvl>1</lvl>
<relation>6</relation>
</author>
</authors>
<genres>
<genre title="научная фантастика" id="5073" bisac="FIC028020"/>
<genre title="социальная фантастика" id="5078" bisac="FIC028000"/>
</genres>
<relations>
<related uuid="76316fbc-2c44-102b-839c-b3fddb510218" relation="8" type="0"/>
</relations>
<copyrights>
<copyright id="9354189" title="ЛитРес: чтец" percent="26.00"/>
<copyright id="9354794" title="Эксмо" percent="50.00"/>
<copyright id="9356032" title="Думанский Андрей" percent="100.00"/>
</copyrights>
</updated-book>
<removed-book id="24261892" uid="fc3ba230-4753-11e7-b2fb-0cc47a52085c" removed="2018-04-19 10:34:13"/>
</fb-updates>
因此,我要实现2个类,一个用于更新书籍,一个用于已移除书籍。
class RemovedBook {
RemovedBook({
this.id,
this.uid,
this.removed,
});
String id;
String uid;
DateTime removed;
}
UpdatedBook类更复杂,但这不是问题的范围。
final url = Uri.parse('http://ip-api.com/xml/');
final request = await httpClient.getUrl(url);
final response = await request.close();
final stream = response
.transform(utf8.decoder)
.transform(const XmlEventDecoder())
.transform(const XmlNormalizer())
.expand((events) => events)
.forEach((event) => print(event));
那么,如何从流中获取我的类(class)呢?
最佳答案
How to group XML elements from a HttpClient stream in Flutter中的答案说明了如何将事件流(受skipWhile
和takeWhile
中的条件限制)转换为节点的子树(使用XmlNodeDecoder
)。
在这种情况下,情况有点复杂:我们需要多次输入/退出跳过/零件。不幸的是,我不知道如何以一种优雅的方式使用Dart Streams来做到这一点(使用某些Rx扩展可能更容易吗?),但是从xml 4.4.0开始,您可以编写:
response
.transform(utf8.decoder)
.toXmlEvents()
.selectSubtreeEvents((event) =>
event.name == 'updated-book' || event.name == 'removed-book')
.toXmlNodes()
.flatten()
.where((node) => node is XmlElement)
.cast<XmlElement>()
.map((element) {
if (element.name.qualified == 'removed-book') {
return RemovedBook(
id: element.getAttribute('id'),
...
));
} else {
...
}
})
.forEach(print);
虽然绝对可以使用Flutter在移动设备上读取和处理此类数据,但您可能需要考虑预先在功能更强大的设备上预处理如此大量的数据。
关于xml - 在Dart/Flutter中解析巨大的(3Gb)XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63431246/
我一直在使用 AJAX 从我正在创建的网络服务中解析 JSON 数组时遇到问题。我的前端是一个简单的 ajax 和 jquery 组合,用于显示从我正在创建的网络服务返回的结果。 尽管知道我的数据库查
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在尝试运行 Android 应用程序时遇到问题并收到以下错误 java.lang.NoClassDefFoundError: com.parse.Parse 当我尝试运行该应用时。 最佳答案 在这
有什么办法可以防止etree在解析HTML内容时解析HTML实体吗? html = etree.HTML('&') html.find('.//body').text 这给了我 '&' 但我想
我有一个有点疯狂的例子,但对于那些 JavaScript 函数作用域专家来说,它看起来是一个很好的练习: (function (global) { // our module number one
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我需要编写一个脚本来获取链接并解析链接页面的 HTML 以提取标题和其他一些数据,例如可能是简短的描述,就像您链接到 Facebook 上的内容一样。 当用户向站点添加链接时将调用它,因此在客户端启动
在 VS Code 中本地开发时,包解析为 C:/Users//AppData/Local/Microsoft/TypeScript/3.5/node_modules/@types//index而不是
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我被赋予了将一种语言“翻译”成另一种语言的工作。对于使用正则表达式的简单逐行方法来说,源代码过于灵活(复杂)。我在哪里可以了解更多关于词法分析和解析器的信息? 最佳答案 如果你想对这个主题产生“情绪化
您好,我在解析此文本时遇到问题 { { { {[system1];1;1;0.612509325}; {[system2];1;
我正在为 adobe after effects 在 extendscript 中编写一些代码,最终变成了 javascript。 我有一个数组,我想只搜索单词“assemble”并返回整个 jc3_
我有这段代码: $(document).ready(function() { // }); 问题:FB_RequireFeatures block 外部的代码先于其内部的代码执行。因此 who
背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host,这样省掉了些
1.首先贴上我试验成功的代码 复制代码 代码如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 X
【PHP代码】 复制代码 代码如下: $stmt = mssql_init('P__Global_Test', $conn) or die("initialize sto
在SQL查询分析器执行以下代码就可以了。 复制代码代码如下: declare @t varchar(255),@c varchar(255) declare table_cursor curs
前言 最近练习了一些前端算法题,现在做个总结,以下题目都是个人写法,并不是标准答案,如有错误欢迎指出,有对某道题有新的想法的友友也可以在评论区发表想法,互相学习🤭 题目 题目一: 二维数组中的
我是一名优秀的程序员,十分优秀!