【发布时间】:2019-05-15 15:04:37
【问题描述】:
给定以下复杂的 xml。
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>resps</name>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>param0</name>
<value>
<struct>
<member>
<name>param1</name>
<value>
<int>12</int>
</value>
</member>
<member>
<name>param2</name>
<value>
<int>12</int>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>param12</name>
<value>
<int>3143</int>
</value>
</member>
<member>
<name>param3</name>
<value>
<int>207</int>
</value>
</member>
<member>
<name>param4</name>
<value>
<int>4056</int>
</value>
</member>
<member>
<name>param5</name>
<value>
<int>267</int>
</value>
</member>
<member>
<name>param6</name>
<value>
<double>1.290682</double>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</member>
<member>
<name>errors</name>
<value>
<array>
<data />
</array>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
我希望解析这个并取出对我至关重要的键/值 - 这是 param0 和 param1 等等。
我尝试了多种方法。从使用 xpath 到必要的节点,解析为 JObject 并以这种方式询问它,或者只是将其保留为字符串并尝试对我需要的项目进行正则表达式。我什至已经获取了 XML 的内部文本并尝试提取迭代不同字符的文本。
我不愿意将其反序列化为对象,否则只会将问题转移到强类型表单。
所有这些方法都感觉非常笨重且不可维护。我正在寻找处理/解析这些数据的最佳方式的建议或方向。
我根本无法更改数据源。
【问题讨论】:
-
看看
XmlSerializer,恕我直言,它最适合深度嵌套的数据结构。 -
你有一个类似于文件系统的多层嵌套结构。仅解析结构而不跟踪分层,您将丢失大量信息。要正确解析此文件,您需要使用维护层的递归算法。如果您的计算机上有文件,则获取上次更改的日期将很有用,但您不想每次需要读取文件时都搜索整个 c:\ 驱动器。您想要跟踪文件夹。使用这个 xml 文件,您可以轻松地归档名称和整数值,但了解父级可能也很重要。
标签: c# xml serialization