Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
是否有类似于JAXB for Java的用于XML绑定的JavaScript API?_Javascript_Xml_Jaxb_Dwr_Jsonix - Fatal编程技术网

是否有类似于JAXB for Java的用于XML绑定的JavaScript API?

是否有类似于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) { .

在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) { ... }
}
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的服务器端解决方案,它也可以正常工作。但我需要客户端解决方案(服务器端代理仍然可以)。