如何将 xml 文件导入 dart 对象

SAL*_*QAH 2 xml dart flutter

我正在尝试使用 xml 包将 c# XmlSerializer 导出的 xml 文件导入到 dart 对象\n但我所有的导入尝试都失败了。

\n
<?xml version="1.0" encoding="utf-8"?>\n<ArrayOfViewReads xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\n  <ViewReads>\n    <CounterAccount>7e7386db-ae4e-47f8-a473-8a5534b8b421</CounterAccount>\n    <ParentCounter>00000000-0000-0000-0000-000000000000</ParentCounter>\n    <CounterGuid>88165f87-113b-4503-bd95-01cfc778cf0e</CounterGuid>\n    <CounterID>354</CounterID>\n    <AccountName>\xd9\x8a\xd8\xad\xd9\x8a \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85\xd8\xb1</AccountName>\n    <AreaName>\xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85  \xd9\x88\xd8\xba\xd8\xb2\xd9\x87</AreaName>\n    <AddressDesc>\xd9\x85\xd9\x86\xd8\xb7\xd9\x82\xd9\x87 \xd8\xa7\xd9\x84\xd9\x88\xd8\xa1 \xd8\xa7\xd9\x84\xd8\xa7\xd8\xae\xd8\xb6\xd8\xb1</AddressDesc>\n    <Phone>771707009</Phone>\n    <FazName>\xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2</FazName>\n    <Balance>865.0000</Balance>\n    <LastRead>7332.00</LastRead>\n  </ViewReads>\n  <ViewReads>\n    <CounterAccount>46e2bacc-644f-47fb-abe7-6589f880667e</CounterAccount>\n    <ParentCounter>00000000-0000-0000-0000-000000000000</ParentCounter>\n    <CounterGuid>2d2f1a40-9dcf-4a3c-9fd2-081d3be83aaa</CounterGuid>\n    <CounterID>2052</CounterID>\n    <AccountName>\xd9\x83\xd9\x85\xd8\xa7\xd9\x84 \xd9\x85\xd8\xad\xd9\x85\xd8\xaf \xd8\xb9\xd9\x84\xd9\x8a \xd8\xab\xd8\xa7\xd9\x85\xd8\xb1</AccountName>\n    <AreaName>\xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85  \xd9\x88\xd8\xba\xd8\xb2\xd9\x87</AreaName>\n    <AddressDesc>\xd8\xae\xd9\x84\xd9\x81 \xd9\x83\xd9\x88\xd8\xa7\xd9\x81\xd9\x8a\xd8\xb1 \xd8\xa7\xd9\x84\xd8\xb3\xd9\x84\xd8\xb7\xd8\xa7\xd9\x86\xd9\x87</AddressDesc>\n    <Phone>771363922</Phone>\n    <FazName>\xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2</FazName>\n    <Balance>1560.0000</Balance>\n    <LastRead>84.00</LastRead>\n    <UserGuid>00000000-0000-0000-0000-000000000000</UserGuid>\n  </ViewReads>\n</ArrayOfViewReads>\n
Run Code Online (Sandbox Code Playgroud)\n

这是我使用 VSCode 生成的 fromJson() 方法从 dart 导入代码:

\n
  final file = File('C:\\\\Users\\\\SALMAN\\\\Desktop\\\\2021_1_19_559.xml');\n  final document = XmlDocument.parse(file.readAsStringSync());\n\n  document.children.forEach((e) {\n    var v = ViewRead.fromJson(e.toString());\n  });\n
Run Code Online (Sandbox Code Playgroud)\n

这是我尝试运行代码后的错误:

\n
Unhandled exception:\nFormatException: Unexpected character (at character 1)\n<?xml version="1.0" encoding="utf-8"?>\n^\n\n#0      _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1404:5)\n#1      _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1271:9)\n#2      _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:936:22)\n#3      _parseJson (dart:convert-patch/convert_patch.dart:40:10)\n#4      JsonDecoder.convert (dart:convert/json.dart:505:36)\n#5      JsonCodec.decode (dart:convert/json.dart:156:41)\n#6      new ViewRead.fromJson (file:///C:/Users/SALMAN/.IntelliJIdea2019.1/dart/bin/dart.dart:170:70)\n#7      main.<anonymous closure> (file:///C:/Users/SALMAN/.IntelliJIdea2019.1/dart/bin/dart.dart:16:22)\n#8      List.forEach (dart:core-patch/growable_array.dart:313:8)\n#9      _DelegatingIterableBase.forEach (package:collection/src/wrappers.dart:52:45)\n#10     main (file:///C:/Users/SALMAN/.IntelliJIdea2019.1/dart/bin/dart.dart:15:21)\n#11     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:299:32)\n#12     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)\n\n
Run Code Online (Sandbox Code Playgroud)\n

jul*_*101 5

以下是如何使用以下包解析此 XML 的示例xmlhttps://pub.dev/packages/xml

\n
import \'package:xml/xml.dart\';\n\nconst xml = \'\'\'\n<?xml version="1.0" encoding="utf-8"?>\n<ArrayOfViewReads xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\n  <ViewReads>\n    <CounterAccount>7e7386db-ae4e-47f8-a473-8a5534b8b421</CounterAccount>\n    <ParentCounter>00000000-0000-0000-0000-000000000000</ParentCounter>\n    <CounterGuid>88165f87-113b-4503-bd95-01cfc778cf0e</CounterGuid>\n    <CounterID>354</CounterID>\n    <AccountName>\xd9\x8a\xd8\xad\xd9\x8a \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85\xd8\xb1</AccountName>\n    <AreaName>\xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85  \xd9\x88\xd8\xba\xd8\xb2\xd9\x87</AreaName>\n    <AddressDesc>\xd9\x85\xd9\x86\xd8\xb7\xd9\x82\xd9\x87 \xd8\xa7\xd9\x84\xd9\x88\xd8\xa1 \xd8\xa7\xd9\x84\xd8\xa7\xd8\xae\xd8\xb6\xd8\xb1</AddressDesc>\n    <Phone>771707009</Phone>\n    <FazName>\xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2</FazName>\n    <Balance>865.0000</Balance>\n    <LastRead>7332.00</LastRead>\n  </ViewReads>\n  <ViewReads>\n    <CounterAccount>46e2bacc-644f-47fb-abe7-6589f880667e</CounterAccount>\n    <ParentCounter>00000000-0000-0000-0000-000000000000</ParentCounter>\n    <CounterGuid>2d2f1a40-9dcf-4a3c-9fd2-081d3be83aaa</CounterGuid>\n    <CounterID>2052</CounterID>\n    <AccountName>\xd9\x83\xd9\x85\xd8\xa7\xd9\x84 \xd9\x85\xd8\xad\xd9\x85\xd8\xaf \xd8\xb9\xd9\x84\xd9\x8a \xd8\xab\xd8\xa7\xd9\x85\xd8\xb1</AccountName>\n    <AreaName>\xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85  \xd9\x88\xd8\xba\xd8\xb2\xd9\x87</AreaName>\n    <AddressDesc>\xd8\xae\xd9\x84\xd9\x81 \xd9\x83\xd9\x88\xd8\xa7\xd9\x81\xd9\x8a\xd8\xb1 \xd8\xa7\xd9\x84\xd8\xb3\xd9\x84\xd8\xb7\xd8\xa7\xd9\x86\xd9\x87</AddressDesc>\n    <Phone>771363922</Phone>\n    <FazName>\xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2</FazName>\n    <Balance>1560.0000</Balance>\n    <LastRead>84.00</LastRead>\n    <UserGuid>00000000-0000-0000-0000-000000000000</UserGuid>\n  </ViewReads>\n</ArrayOfViewReads>\n\'\'\';\n\nclass ViewReads {\n  final String counterAccount;\n  final String parentCounter;\n  final String counterGuid;\n  final int counterID;\n  final String accountName;\n  final String areaName;\n  final String addressDesc;\n  final String phone;\n  final String fazName;\n  final double balance;\n  final double lastRead;\n  final String userGuid;\n\n  ViewReads(\n      this.counterAccount,\n      this.parentCounter,\n      this.counterGuid,\n      this.counterID,\n      this.accountName,\n      this.areaName,\n      this.addressDesc,\n      this.phone,\n      this.fazName,\n      this.balance,\n      this.lastRead,\n      this.userGuid);\n\n  factory ViewReads.fromXmlElement(XmlElement xmlElement) => ViewReads(\n      xmlElement.findElements(\'CounterAccount\').single.text,\n      xmlElement.findElements(\'ParentCounter\').single.text,\n      xmlElement.findElements(\'CounterGuid\').single.text,\n      int.parse(xmlElement.findElements(\'CounterID\').single.text),\n      xmlElement.findElements(\'AccountName\').single.text,\n      xmlElement.findElements(\'AreaName\').single.text,\n      xmlElement.findElements(\'AddressDesc\').single.text,\n      xmlElement.findElements(\'Phone\').single.text,\n      xmlElement.findElements(\'FazName\').single.text,\n      double.parse(xmlElement.findElements(\'Balance\').single.text),\n      double.parse(xmlElement.findElements(\'LastRead\').single.text),\n      _firstTextOrNull(xmlElement.findElements(\'UserGuid\')));\n\n  static String _firstTextOrNull(Iterable<XmlElement> xmlElements) =>\n      xmlElements.isEmpty ? null : xmlElements.single.text;\n\n  @override\n  String toString() {\n    return \'ViewReads{counterAccount: $counterAccount, \'\n        \'parentCounter: $parentCounter, \'\n        \'counterGuid: $counterGuid, \'\n        \'counterID: $counterID, \'\n        \'accountName: $accountName, \'\n        \'areaName: $areaName, \'\n        \'addressDesc: $addressDesc, \'\n        \'phone: $phone, \'\n        \'fazName: $fazName, \'\n        \'balance: $balance, \'\n        \'lastRead: $lastRead, \'\n        \'userGuid: $userGuid}\';\n  }\n}\n\nvoid main() {\n  final document = XmlDocument.parse(xml);\n\n  final listOfViewReads = document\n      .findAllElements(\'ViewReads\')\n      .map((xmlElement) => ViewReads.fromXmlElement(xmlElement))\n      .toList();\n\n  listOfViewReads.forEach(print);\n  // ViewReads{counterAccount: 7e7386db-ae4e-47f8-a473-8a5534b8b421, parentCounter: 00000000-0000-0000-0000-000000000000, counterGuid: 88165f87-113b-4503-bd95-01cfc778cf0e, counterID: 354, accountName: \xd9\x8a\xd8\xad\xd9\x8a \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85\xd8\xb1, areaName: \xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85  \xd9\x88\xd8\xba\xd8\xb2\xd9\x87, addressDesc: \xd9\x85\xd9\x86\xd8\xb7\xd9\x82\xd9\x87 \xd8\xa7\xd9\x84\xd9\x88\xd8\xa1 \xd8\xa7\xd9\x84\xd8\xa7\xd8\xae\xd8\xb6\xd8\xb1, phone: 771707009, fazName: \xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2, balance: 865.0, lastRead: 7332.0, userGuid: null}\n  // ViewReads{counterAccount: 46e2bacc-644f-47fb-abe7-6589f880667e, parentCounter: 00000000-0000-0000-0000-000000000000, counterGuid: 2d2f1a40-9dcf-4a3c-9fd2-081d3be83aaa, counterID: 2052, accountName: \xd9\x83\xd9\x85\xd8\xa7\xd9\x84 \xd9\x85\xd8\xad\xd9\x85\xd8\xaf \xd8\xb9\xd9\x84\xd9\x8a \xd8\xab\xd8\xa7\xd9\x85\xd8\xb1, areaName: \xd9\x85\xd8\xb1\xd8\xa8\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85  \xd9\x88\xd8\xba\xd8\xb2\xd9\x87, addressDesc: \xd8\xae\xd9\x84\xd9\x81 \xd9\x83\xd9\x88\xd8\xa7\xd9\x81\xd9\x8a\xd8\xb1 \xd8\xa7\xd9\x84\xd8\xb3\xd9\x84\xd8\xb7\xd8\xa7\xd9\x86\xd9\x87, phone: 771363922, fazName: \xd8\xb3\xd9\x86\xd8\xac\xd9\x84 \xd9\x81\xd8\xa7\xd8\xb2, balance: 1560.0, lastRead: 84.0, userGuid: 00000000-0000-0000-0000-000000000000}\n}\n
Run Code Online (Sandbox Code Playgroud)\n