Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSAX-SXML及其编号_Xml_Scheme_Sxml - Fatal编程技术网

SSAX-SXML及其编号

SSAX-SXML及其编号,xml,scheme,sxml,Xml,Scheme,Sxml,我正在使用SSAX-SXML处理一个树结构,它只是模仿XML数据编码。因此,我考虑直接使用SXML表示作为数据结构进行处理。一切都很好,我得到了默认访问器和XPath的所有功能,我发现这非常有用 但我有个问题。XML将所有内容都表示为字符串,因此我需要始终将字符串转换为数字,反之亦然。这将扼杀性能,只是一个糟糕的设计理念。我正在考虑使用SXML列表,一次将所有字符串转换为数字。但是,有没有一种方法可以让SXML直接做到这一点,或者有没有任何方法可以通过XML告诉我们,某些东西应该表示为一个数字,

我正在使用SSAX-SXML处理一个树结构,它只是模仿XML数据编码。因此,我考虑直接使用SXML表示作为数据结构进行处理。一切都很好,我得到了默认访问器和XPath的所有功能,我发现这非常有用

但我有个问题。XML将所有内容都表示为字符串,因此我需要始终将字符串转换为数字,反之亦然。这将扼杀性能,只是一个糟糕的设计理念。我正在考虑使用SXML列表,一次将所有字符串转换为数字。但是,有没有一种方法可以让SXML直接做到这一点,或者有没有任何方法可以通过XML告诉我们,某些东西应该表示为一个数字,而不是一个字符串

这是我的SXML列表:

((wall (@ (uid "2387058723"))
   (pt (@ (y "2.0") (x "1.0")))
   (pt (@ (y "4.0") (x "3.0"))))
(wall (@ (uid "5493820876"))
   (pt (@ (y "0.0") (x "0.0")))
   (pt (@ (y "100.0") (x "0.0")))
   (window (@ (to "0.4") (from "0.2")))
   (window (@ (size "1.0") (from "0.2")))
   (door (@ (size "1.0") (from "0.2"))))
(pilar (@ (uid "692034802"))
    (center (@ (y "5.0") (x "5.0")))
    (dim (@ (b "0.45") (a "0.3"))))
(room (@ (label "salon"))
   (wall (@ (uid "2387058723")))
   (wall (@ (uid "5493820876")))
   (wall (@ (uid "5394501263")))
   (wall (@ (uid "0034923049"))))
(entry (@ (doorNumber "0")) (wall (@ (uid "5493820876"))))
(num "0,9")
(pipe (@ (y "8.0") (x "10.0"))))
从如下所示的XML(摘录):



谢谢。

SSAX不支持进行类型转换,因为正如您正确注意到的,XML缺少任何语义信息。您所能做的就是在属性上设置一些scheme约束。但是SSAX不支持XSD。所以它没有任何用处

但将所有字符串转换为数字非常简单,因为解析后的XML存储在列表中,处理列表是Scheme中最自然的事情


但是你会在你的UID上失去前导零。它们可能很重要。

我怀疑转换为字符串和返回与整体性能有很大关系。你可能是对的,而且我没有得到任何回应,我将处理即时转换,稍后我将进行完整的传递转换。你在哪个平台上?你的要求是什么?我这样问是因为您的数据看起来不像所示示例中的树,所以SXML可能不会让您的生活更轻松。XML与XSD到DOM再到本机数据结构可以大大简化您的生活。
        <wall uid="2387058723">
            <pt x="1.0" y="2.0"/>
            <pt x="3.0" y="4.0"/>
        </wall>
(define example '((wall (@ (uid "1"))
                        (pt (@ (x "1.0") (y "2.0")))
                        (pt (@ (x "3.0") (y "4.0"))))))

(define (ssax:string->number ssax)
  (if (string? ssax)
      (string->number ssax)
      (if (list? ssax)
          (map ssax:string->number ssax)
          ssax)))

(ssax:string->number example)