是否有类似于JAXB for Java的用于XML绑定的JavaScript API?
在Java中,我们经常使用JAXB2。ObjectXML映射在Java类中定义为注释:是否有类似于JAXB for Java的用于XML绑定的JavaScript API?,javascript,xml,jaxb,dwr,jsonix,Javascript,Xml,Jaxb,Dwr,Jsonix,在Java中,我们经常使用JAXB2。ObjectXML映射在Java类中定义为注释: @XmlRootElement(name="usertask", namespace="urn:test") public class UserTask { @XmlElement(namespace="urn:test") public String getAssignee() { ... } public void setAssignee(String assignee) { .
@XmlRootElement(name="usertask", namespace="urn:test")
public class UserTask
{
@XmlElement(namespace="urn:test")
public String getAssignee() { ... }
public void setAssignee(String assignee) { ... }
}
JAXB运行时可以读取这些注释并创建解组器,以将XML解析为对象实例或将对象打包为XML
JAXB提供了一个模式编译器(XJC),它可以从XML模式中生成带注释的类,这是另一个伟大的特性
最近,我们一直在大量使用客户端JavaScript。我们还需要在那里进行XML处理。例如,我们需要解析WPS文档,如。这些文档也符合(以下是示例XML)。使用JavaScript对象而不是XML将非常好,这将节省大量的工作。在某些情况下,我们可以使用基于JSON的解决方案,例如,但在许多情况下,我们必须在客户端处理XML 我的问题是: 是否有类似于JAXB的JavaScript? 有什么工具可以将XML模式编译成一些XMLobject映射,并提供运行时在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中添加一个通用样式表定义:XSLT,以将它们转换为JSON。 例如:
与JSON相比,使用Javascript处理XML是一件痛苦的事情,尤其是跨浏览器。
样式表将为您的请求增加一点开销。无论是在服务器端还是客户端,您都可以选择,但您必须将其与在不同浏览器上使用Javascript解析和读取XML的代码复杂性和速度进行比较。到目前为止,我还没有找到与我需要的类似的东西。因此,我决定亲自实施。以下是项目页面: 该项目位于GitHub上:
我还没有尝试过这个,所以我不确定它是否有效,但是您是否考虑过使用GWT,以便您仍然可以使用JAXB并将整个应用程序作为java应用程序编写?我不确定GWT是否支持JAXB(可能不支持),但它可能会支持另一种xml解析方法。如果这样做有效,您可以通过gwt自动创建javascript模型,然后将这些模型包含到您的应用程序中。是的,它比您想要的要简陋得多,但比从头开始编写要好得多。对JAXB的JSON支持如何?重用当前的JAXB注释模型类,但从REST端点输出JSON 当前版本的支持此功能(通过模块)
您也可以尝试使用和支持。XSLT解决方案不适合,原因有很多。首先,我们需要客户端处理。使用XSLT处理器将XML转换为JSON太重了,令人无法接受。无论如何,我认为XSLT并不是这里最好的技术选择:7K XSLT可以用3K JavaScript完成—客户端不需要XSLT处理器。其次,像您发布链接的XSLT不是特定于模式的。例如,如果您有一个foo元素,您实际上不知道这是一个单独的项:'foo'还是一个数组项:['foo']。有了2010年,你不知道这是一年还是一个数字等等。XMLobject映射必须是在此处派生的模式,以提供XML实例本身不提供的适当结构和类型信息。在XML中添加类似
的头可以被所有浏览器理解,而无需添加任何内容,或者您可以将其设为服务器端(nginx在这方面非常擅长)。移动到JSON意味着一些折衷,特别是在模式、类型等方面。。。但对我来说,这是值得的损失。”…值得的损失“没有意义。您提出的建议实际上并没有实现OP想要做的事情。对JAXB的JSON支持正是我所需要的。但是在客户端,使用纯JavaScript。Jersey and Co.可以在服务器端使用。现在我们有一个基于DWR的服务器端解决方案,它也可以正常工作。但我需要客户端解决方案(服务器端代理仍然可以)。