【问题标题】:Saving a list of numbers in XML在 XML 中保存数字列表
【发布时间】:2012-09-02 12:57:26
【问题描述】:

我正在制作一个从工作室预订设备的程序。我将所有内容都保存到 XML 中(我最终会让它在线同步),并且我可以保存除整数的 ArrayList 之外的所有内容。这些整数是正在使用的设备的唯一 ID。

我的问题是,如何在 XML 中存储和检索它们?我可以保存它们,但我在读取它们时遇到了麻烦,这是保存设备的摘录:

for(Integer i : b.getEquipment()){ 
                Element equipmentID = doc.createElement("EquipmentID");
                equipmentID.appendChild(doc.createTextNode(i.toString()));
                theEquipment.appendChild(equipmentID);

            }

在 XML 中,这看起来像..(来自 )

<Booking>
<Person>1</Person>
<Project>Current</Project>
<Equipment>
    <EquipmentID>2</EquipmentID>
</Equipment>
<DateOut>09/09 11:24:15</DateOut>
</Booking>

我现在的麻烦,是如何读取 标签? 可能有很多 标签,因为很多设备可能会被预订一空。 谢谢。

【问题讨论】:

  • 我不明白你的问题......阅读标签到底有什么问题?你用什么来解析这个?
  • 同意——这个问题似乎非常不完整。
  • 读取任何 XML 的代码在哪里?

标签: java xml xml-parsing integer


【解决方案1】:

如果Booking 节点包含Equipment ID 的列表,并且您需要保留这些ID,而不需要为每个设备ID 提供额外信息,则将您的设备ID 列表转换为逗号分隔的字符串。像这样:&lt;EquipmentIDS&gt;1, 2, 3, 4, 5, 6, 7&lt;/EquipmentIDS&gt;

并在解析时使用StringTokenizer 从该字符串中提取每个设备ID。

【讨论】:

  • 并不是说这行不通,但是如果你真的在生产代码中做这样的事情,我工作的高级软件架构师会杀了你......
  • 如果有只有个设备ID,并且不再与这些ID信息相关联,为什么不将它们作为字符串传递呢?我认为您的高级架构师没有高负载项目的经验。在这种情况下,额外的标签会在通信渠道上产生不必要的负载,根本没有用处。
  • 这是一个数据分离问题 - 它打破了惯例和期望,并且依赖于必须使用这种格式的每个人都知道这是一个列表。对于“高负载项目”(我向您保证,我们有丰富的经验),如果性能是一个问题,则无论如何都不应该使用 XML 作为通信协议 - ASN.1 或其他二进制格式会更好。
  • 我从事的 MQ 解决方案,例如 IBM Websphere MQ,使用 xml 作为消息格式。每分钟有数千条消息。不涉及二进制格式。再一次,如果只有 id 列表,并且我不需要为每个 id 关联附加信息,我会选择一个列表并将其作为一个标签的主体传递。如果有special 考虑,那么它可能是一个不同的解决方案。但是这个问题没有提到。
  • 当然 OPs 问题无论如何都是微不足道的,所以无论他选择您的解决方案还是将每个 ID 添加为自己的元素都没有关系。但是您的方法的另一个问题是您无法为该逗号分隔列表(作为列表而不是简单元素)创建 XSD 模式元素,这意味着您无法使用 JAXB 或类似工具自动解析,或者执行自动 XSLT翻译之类的。问题是它打破了惯例——元素列表应该表示为节点列表,而不是一些自制的非标准格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 2019-02-19
相关资源
最近更新 更多