当attrib的名称中有冒号时,将xsd转换为clojure.data.xml.Element会丢失数据
我在读取xsd文件时遇到问题。 当它将其转换为#clojure.data.xml.Element时,它会丢失一些属性,例如xmlns:tns–如何正确地转换它 最后,我希望将xml保存到noSQL数据库(我将mongodb与monger一起使用,因为它有很好的支持),然后稍后以相同的xml输出回来 这里是一个示例xsd,但我希望能够上载任何xsd/xslt/xml文件:当attrib的名称中有冒号时,将xsd转换为clojure.data.xml.Element会丢失数据,xml,mongodb,clojure,xsd,Xml,Mongodb,Clojure,Xsd,我在读取xsd文件时遇到问题。 当它将其转换为#clojure.data.xml.Element时,它会丢失一些属性,例如xmlns:tns–如何正确地转换它 最后,我希望将xml保存到noSQL数据库(我将mongodb与monger一起使用,因为它有很好的支持),然后稍后以相同的xml输出回来 这里是一个示例xsd,但我希望能够上载任何xsd/xslt/xml文件: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://tempuri.org/PurchaseOrderSchema.xsd"
targetNamespace="http://tempuri.org/PurchaseOrderSchema.xsd"
elementFormDefault="qualified">
<xsd:element name="PurchaseOrder" type="tns:PurchaseOrderType"/>
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:element name="ShipTo" type="tns:USAddress" maxOccurs="2"/>
<xsd:element name="BillTo" type="tns:USAddress"/>
</xsd:sequence>
<xsd:attribute name="OrderDate" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="USAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:integer"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
</xsd:complexType>
</xsd:schema>
我得到的结果是:
#clojure.data.xml.Element{:tag :schema, :attrs {:targetNamespace http://tempuri.
org/PurchaseOrderSchema.xsd, :elementFormDefault qualified}, :content (#clojure.
data.xml.Element{:tag :element, :attrs {:name PurchaseOrder, :type tns:PurchaseO
rderType}, :content ()} #clojure.data.xml.Element{:tag :complexType, :attrs {:na
me PurchaseOrderType}, :content (#clojure.data.xml.Element{:tag :sequence, :attr
s {}, :content (#clojure.data.xml.Element{:tag :element, :attrs {:name ShipTo, :
type tns:USAddress, :maxOccurs 2}, :content ()} #clojure.data.xml.Element{:tag :
element, :attrs {:name BillTo, :type tns:USAddress}, :content ()})} #clojure.dat
a.xml.Element{:tag :attribute, :attrs {:name OrderDate, :type xsd:date}, :conten
t ()})} #clojure.data.xml.Element{:tag :complexType, :attrs {:name USAddress}, :
content (#clojure.data.xml.Element{:tag :sequence, :attrs {}, :content (#clojure
.data.xml.Element{:tag :element, :attrs {:name name, :type xsd:string}, :content
()} #clojure.data.xml.Element{:tag :element, :attrs {:name street, :type xsd:st
ring}, :content ()} #clojure.data.xml.Element{:tag :element, :attrs {:name city,
:type xsd:string}, :content ()} #clojure.data.xml.Element{:tag :element, :attrs
{:name state, :type xsd:string}, :content ()} #clojure.data.xml.Element{:tag :e
lement, :attrs {:name zip, :type xsd:integer}, :content ()})} #clojure.data.xml.
Element{:tag :attribute, :attrs {:name country, :type xsd:NMTOKEN, :fixed US}, :
content ()})})}
((slurp(:tempfile uploadSourceXML))
应引发错误。slurp可以返回字符串或nil,两者都不能实现IFn。是否缺少用于解析xml的函数?因为slurp不能返回clojure.data.xml.Element
我已经更正了缺少的部分,所以它显示了xml/parse str-感谢您发现了这一点。slurp调用仍然中断((slurp x))
将始终为任何x
抛出异常我已经更正了slurp。我关心的是缺少的属性,例如xmlns:tns
#clojure.data.xml.Element{:tag :schema, :attrs {:targetNamespace http://tempuri.
org/PurchaseOrderSchema.xsd, :elementFormDefault qualified}, :content (#clojure.
data.xml.Element{:tag :element, :attrs {:name PurchaseOrder, :type tns:PurchaseO
rderType}, :content ()} #clojure.data.xml.Element{:tag :complexType, :attrs {:na
me PurchaseOrderType}, :content (#clojure.data.xml.Element{:tag :sequence, :attr
s {}, :content (#clojure.data.xml.Element{:tag :element, :attrs {:name ShipTo, :
type tns:USAddress, :maxOccurs 2}, :content ()} #clojure.data.xml.Element{:tag :
element, :attrs {:name BillTo, :type tns:USAddress}, :content ()})} #clojure.dat
a.xml.Element{:tag :attribute, :attrs {:name OrderDate, :type xsd:date}, :conten
t ()})} #clojure.data.xml.Element{:tag :complexType, :attrs {:name USAddress}, :
content (#clojure.data.xml.Element{:tag :sequence, :attrs {}, :content (#clojure
.data.xml.Element{:tag :element, :attrs {:name name, :type xsd:string}, :content
()} #clojure.data.xml.Element{:tag :element, :attrs {:name street, :type xsd:st
ring}, :content ()} #clojure.data.xml.Element{:tag :element, :attrs {:name city,
:type xsd:string}, :content ()} #clojure.data.xml.Element{:tag :element, :attrs
{:name state, :type xsd:string}, :content ()} #clojure.data.xml.Element{:tag :e
lement, :attrs {:name zip, :type xsd:integer}, :content ()})} #clojure.data.xml.
Element{:tag :attribute, :attrs {:name country, :type xsd:NMTOKEN, :fixed US}, :
content ()})})}