在Java中,我们经常使用JAXB2。对象<-> XML映射以Java类中的注释形式定义:
@XmlRootElement(name="usertask", namespace="urn:test")
public class UserTask
{
@XmlElement(namespace="urn:test")
public String getAssignee() { ... }
public void setAssignee(String assignee) { ... }
}
JAXB运行时可以读取这些注释,并创建一个解组器(unmarshaller)将XML解析为对象实例,或将对象编组为XML。
JAXB附带一个模式编译器(XJC),它可以从XML模式生成带有注释的类,这是另一个很棒的功能。
最近我们一直在大量使用客户端JavaScript,我们也需要在那里进行XML处理。例如,我们需要解析WPS文档,如此文档所示。这些文档也符合不同的XML模式(这里是WPS 1.0.0模式的示例XML)。使用JavaScript对象而不是XML将是非常好的,这可以节省大量的工作量。在某些情况下,我们可以使用基于JSON的解决方案,如DWR,但在许多情况下,我们确实需要在客户端处理XML。
我的问题是:
是否有适用于JavaScript的JAXB类似物?
是否有一些工具可以将XML模式编译成一些XML<->对象映射,并提供运行时以在XML和JavaScript对象之间进行转换?
我可以轻松想象生成的映射形式:
UserTask = new JSXML.XmlRootElement({
name: "usertask",
namespace: "urn:test",
properties: [
{
assignee: new JSXML.XmlElement({
name: "assignee",
namespace: "urn:test",
type: new JSXML.XSD.String()
})
}
]
});
这应该足够构建反序列化器或序列化器。
<?xml-stylesheet type="text/xml" href="xml2json.xsl"?>
这样的头部,所有浏览器都可以理解,而不需要添加任何东西,或者你可以在服务器端进行处理(nginx非常擅长这方面)。转换为JSON意味着需要做出一些权衡,特别是涉及到模式、类型等方面...但对我来说,这种损失是值得的。 - Mic