是否可以在父标记以及子标记中编写XMLSchema-instance?

苏米特·萨库尔(Sumit S Thakur)

我想在下面的XML中创建“ ServiceAddRQ”和“ Service”标签中具有xmlns:xsi =“ http://www.w3.org/2001/XMLSchema-instance”的XML 那么有可能创建这样的XML吗?

必需的XML:

<ServiceAddRQ echoToken="DummyEchoToken" version="2013/12"
  xmlns="http://www.test.com/schemas/2005/06/messages"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com/schemas/2005/06/messages ServiceAddRQ.xsd">  
        <Service xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ServiceHotel" availToken="1jMqWGjqrx25Bp60gV2Qggb3">
        </Service>
</ServiceAddRQ>

Java生成的XML:在Java生成的代码中,我收到“ Service”标签的空白xmlns ...

<ServiceAddRQ xmlns="http://www.test.com/schemas/2005/06/messages"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" echoToken="6BB6B47EEEF4290515103925"
    version="2013/12"
    xsi:schemaLocation="http://www.test.com/schemas/2005/06/messages HotelValuedAvailRQ.xsd">   
    <Service xmlns="" xsi:type="ServiceHotel" availToken="1/YncBXZJXY17Z/ygNiO7gcg">        
    </Service>
</ServiceAddRQ>

Java代码相同:

    static private Namespace NSSERVICE = Namespace.getNamespace("http://www.test.com/schemas/2005/06/messages");
    static private Namespace NSSCHEMA = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");

        String sXMLOut = "";
        Element barceloDS_requests= new Element("ServiceAddRQ",NSSERVICE);  
            barceloDS_requests.setAttribute("echoToken",searchParams.getSessionID().substring(0, 12)+GenTools.getSystemDateWithTime3());
            barceloDS_requests.setAttribute("version","2013/12");
            barceloDS_requests.addNamespaceDeclaration(NSSCHEMA);
            barceloDS_requests.setAttribute("schemaLocation", "http://www.test.com/schemas/2005/06/messages HotelValuedAvailRQ.xsd", NSSCHEMA);

         Namespace xsi = Namespace.getNamespace(GenTools.returnEmptyForNull(sXMLNS_XSI), "http://www.w3.org/2001/XMLSchema-instance");
         Element eleService=new Element("Service");
            eleService.setAttribute("type", "ServiceHotel", xsi);
            eleService.setAttribute("availToken",contractInfo[1]);
    barceloDS_requests.addContent(eleService);
    sXMLOut = new GetXMLOutputter().getXMLOutputter(barceloDS_requests,true);
伊恩·罗伯茨(Ian Roberts)

序列化程序是正确添加的,xmlns=""因为您已经创建了具有默认名称空间声明的顶级元素,然后添加了不在名称空间中的子元素。为了获得所需的输出,您需要Service使用与http://www.test.com/schemas/2005/06/messagesroot相同的名称空间创建元素ServiceAddRQ像这样尝试更多:

static private Namespace NSSERVICE = Namespace.getNamespace("http://www.test.com/schemas/2005/06/messages");
static private Namespace NSSCHEMA = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");

String sXMLOut = "";
Element barceloDS_requests= new Element("ServiceAddRQ",NSSERVICE);  
barceloDS_requests.setAttribute("echoToken",searchParams.getSessionID().substring(0, 12)+GenTools.getSystemDateWithTime3());
barceloDS_requests.setAttribute("version","2013/12");
barceloDS_requests.addNamespaceDeclaration(NSSCHEMA);
barceloDS_requests.setAttribute("schemaLocation", "http://www.test.com/schemas/2005/06/messages HotelValuedAvailRQ.xsd", NSSCHEMA);

// --------------
// Key change -- Create Service element in the right namespace
Element eleService=new Element("Service",NSSERVICE);
// --------------

eleService.setAttribute("type", "ServiceHotel", NSSCHEMA);
eleService.setAttribute("availToken",contractInfo[1]);
barceloDS_requests.addContent(eleService);

这将创建以下内容的正确输出:

<ServiceAddRQ echoToken="DummyEchoToken" version="2013/12"
  xmlns="http://www.test.com/schemas/2005/06/messages"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.test.com/schemas/2005/06/messages ServiceAddRQ.xsd">  
    <Service xsi:type="ServiceHotel" availToken="1jMqWGjqrx25Bp60gV2Qggb3"/>
</ServiceAddRQ>

Service元素不需要其自己的xmlns:xsi声明,因为它是从父级继承的,但是无论如何,如果您特别想添加一个冗余的声明,则可能可以使用,eleService.addNamespaceDeclaration(NSSCHEMA)但不能保证,因为序列化程序始终可以自由地省略冗余的命名空间声明不要更改结果的语义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java枚举中的INSTANCE

来自分类Dev

Java枚举中的INSTANCE

来自分类Dev

HibernateUtil中的INSTANCE是什么?

来自分类Dev

是否可以在Mercurial中对标签重新标记?

来自分类Dev

是否可以在不指定SQL Server的父标记的情况下查询XML标记?

来自分类Dev

ngRepeat父级中的子标记的未编译指令

来自分类Dev

如何从`List <Instance>`在Weka中创建`Instances`?

来自分类Dev

构造函数中的instance_variable_set

来自分类Dev

索引中instance_variable的RSpec

来自分类Dev

Eclipse CheckStyle插件中的INSTANCE错误

来自分类Dev

如何从`List <Instance>`在Weka中创建`Instances`?

来自分类Dev

instance_eval在实例方法中的行为

来自分类Dev

如何基于XML解析(使用SAX Parser)中的子标记的值来跳过父标记

来自分类Dev

在PHP中的子标记上过滤XML并返回父标记

来自分类Dev

typeof Array'instance可以在JavaScript中返回'Array'吗?

来自分类Dev

是否可以标记/标记/标记经过测试的特定SVN版本?

来自分类Dev

是否可以从AsyncTask添加标记?

来自分类Dev

what is by mean an instance? or instance of?

来自分类Dev

是否可以在WinRT中实现自己的标记扩展?

来自分类Dev

是否可以在Matplotlib中设置标记边缘alpha?

来自分类Dev

是否可以将git commit标记为进行中?

来自分类Dev

是否可以在JSP的页面指令中包含Expression标记?

来自分类Dev

是否可以使用SignalR更新Google Map中的标记?

来自分类Dev

是否可以在<a>标记中自定义标题弹出窗口?

来自分类Dev

是否可以在<figcaption>标记中包含定义列表?

来自分类Dev

可以对instance_eval进行咖喱处理吗?

来自分类Dev

检查对象是否为mixin的instance

来自分类Dev

Mockito是否通过CDI的Instance <>接口支持@Any @Inject?

来自分类Dev

在Python中遍历子标记的XML子标记

Related 相关文章

  1. 1

    Java枚举中的INSTANCE

  2. 2

    Java枚举中的INSTANCE

  3. 3

    HibernateUtil中的INSTANCE是什么?

  4. 4

    是否可以在Mercurial中对标签重新标记?

  5. 5

    是否可以在不指定SQL Server的父标记的情况下查询XML标记?

  6. 6

    ngRepeat父级中的子标记的未编译指令

  7. 7

    如何从`List <Instance>`在Weka中创建`Instances`?

  8. 8

    构造函数中的instance_variable_set

  9. 9

    索引中instance_variable的RSpec

  10. 10

    Eclipse CheckStyle插件中的INSTANCE错误

  11. 11

    如何从`List <Instance>`在Weka中创建`Instances`?

  12. 12

    instance_eval在实例方法中的行为

  13. 13

    如何基于XML解析(使用SAX Parser)中的子标记的值来跳过父标记

  14. 14

    在PHP中的子标记上过滤XML并返回父标记

  15. 15

    typeof Array'instance可以在JavaScript中返回'Array'吗?

  16. 16

    是否可以标记/标记/标记经过测试的特定SVN版本?

  17. 17

    是否可以从AsyncTask添加标记?

  18. 18

    what is by mean an instance? or instance of?

  19. 19

    是否可以在WinRT中实现自己的标记扩展?

  20. 20

    是否可以在Matplotlib中设置标记边缘alpha?

  21. 21

    是否可以将git commit标记为进行中?

  22. 22

    是否可以在JSP的页面指令中包含Expression标记?

  23. 23

    是否可以使用SignalR更新Google Map中的标记?

  24. 24

    是否可以在<a>标记中自定义标题弹出窗口?

  25. 25

    是否可以在<figcaption>标记中包含定义列表?

  26. 26

    可以对instance_eval进行咖喱处理吗?

  27. 27

    检查对象是否为mixin的instance

  28. 28

    Mockito是否通过CDI的Instance <>接口支持@Any @Inject?

  29. 29

    在Python中遍历子标记的XML子标记

热门标签

归档