【问题标题】:XML attribute double value [closed]XML属性双值[关闭]
【发布时间】:2015-12-19 17:11:39
【问题描述】:

我正在尝试使用 DBUnit 来测试我的存储库服务。 我有这个显示预期结果的 xml:

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <product id="1" description="Printer" price="75.0" />
</dataset>

id= String , description = String , price = double.

问题是我习惯了,而不是,所以我不知道如何将属性格式化为双精度类型。

我试过了:price="75.0" , price=75.0 , price=75

之后我无法将其转换为 double,因为我让 DBUnit 进行解析:

IDataSet expectedDataset = new FlatXmlDataSetBuilder().build(expectedDataSetFile);

目前,由于这个问题,我的断言失败,使用调试器我看到数据已正确放入。


截图

【问题讨论】:

  • 您用来解析 XML 文件的代码是什么?
  • 读取 - “我让 DBUnit 进行解析” - 所以我无法控制这个
  • @投反对票的人,请提供你投反对票的原因...

标签: json xml java xml dbunit


【解决方案1】:

默认情况下,在 XML 中,所有内容都是字符串。您可以使用XML Schema Definition 对您的数据及其结构强制执行规则,这样就可以声明价格是双倍的。

但是,我不知道 DBUnit,但我希望它能够提供另一种更简单的方式来说明您的数据格式。

【讨论】:

  • 他试过price="75.0" + 你提供什么解决方案?
  • @YassinHajaj 将 XSD 定义添加到其 XML。请告诉我我是怎么不清楚的,所以我编辑了我的答案
  • 答案尚不清楚,但是您在不知道他如何编码来解析文件的情况下在这里提供的具体解决方案是什么?
  • 我没有看到其 xml 解析的代码,但是任何标准的 XML 解析器都会将没有 XSD 的 XML 解析为字符串,而带有 XSD 并声明属性为双精度的 XML 将被正确解析作为双重
  • "he coded to parse the file" 我很确定解析是由 DBUnit 的new FlatXmlDataSetBuilder().build() 处理的,而且我很确定如果 XSD 正在备份XML 文件
【解决方案2】:

在 XML 中,一切都是字符串。您可以在架构中将属性定义为浮点数,但这不会使解析器将其作为浮点值传递给应用程序。它仍会将其作为字符串传递。

在 XML 中将属性值定义为类型时,实际上是在定义它必须遵守的字符串模式。换句话说,您是说字符串必须包含一个遵循浮点值的字符串表示模式的值。如果字符串与此模式不匹配,验证器会将其标记为错误,但解析器仍会将其作为字符串传递。

下游应用程序(例如 XSLT 脚本)可能会查看模式并使用其中包含的信息将值解释为浮点数,但解析器不会。换句话说,你需要自己铸造它。

【讨论】:

    猜你喜欢
    • 2014-03-03
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多