如何在scala XML解析中处理nil?

如何在scala XML解析中处理nil?,scala,scala-xml,xml-nil,Scala,Scala Xml,Xml Nil,我有一个XML文档,表示我需要解析并保存在db中的模型。在某些字段中,它可能具有由xsi:nil指示的空值。像这样 <quantity xsi:nil="true"/> 对于解析,我使用scala.xml DSL。问题是我找不到任何方法来确定某物是否为零。这个:(elem\“quantity”)只返回一个空字符串,当我试图将它转换为数字时,它就会爆炸。同样,用选项包装也没有帮助 有没有办法从XML片段中获取None、Nil甚至null?在这种情况下,您可以将命名空间URI与XM

我有一个XML文档,表示我需要解析并保存在db中的模型。在某些字段中,它可能具有由xsi:nil指示的空值。像这样

<quantity xsi:nil="true"/>

对于解析,我使用scala.xml DSL。问题是我找不到任何方法来确定某物是否为零。这个:(elem\“quantity”)只返回一个空字符串,当我试图将它转换为数字时,它就会爆炸。同样,用选项包装也没有帮助


有没有办法从XML片段中获取None、Nil甚至null?

在这种情况下,您可以将命名空间URI与XML with
attribute
方法一起使用,以获取“xsi:Nil”属性中的文本

以下是一个工作示例:

scala> val xml = <quantity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
xml: scala.xml.Elem = <quantity xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></quantity>

scala> xml.attribute("http://www.w3.org/2001/XMLSchema-instance", "nil")
res0: Option[Seq[scala.xml.Node]] = Some(true)
如果使用,您可以结合使用过滤器和otpional:

(__ \ "quantity").read[Node]
  .filter(_.attribute("http://www.w3.org/2001/XMLSchema-instance", "nil").isEmpty)
  .map(_.toDouble).optional


免责声明:我为Lucid软件工作,是xtract的贡献者。

谢谢,这就解决了问题。我希望scala.xml可以处理零,但显然不是。
(__ \ "quantity").read[Node]
  .filter(_.attribute("http://www.w3.org/2001/XMLSchema-instance", "nil").isEmpty)
  .map(_.toDouble).optional