在WebMethods中,如何强制文档元素按顺序排列

时间:2015-07-31 15:04:52

标签: xml webmethods

我已经使用一些Childs定义了一个文档(来自xsd架构)。 那些孩子必须按照某种顺序,才能拥有正确的Xml信息。

当In进行一些映射步骤时,元素顺序与文档引用中定义的不同。 如何强迫呢?

这里te文档中的顺序参考: enter image description here

这里是一些地图stemp之后的顺序: enter image description here

数据是正确的,但不是订单。 问题是当我使用documentToXMLString服务从文档中创建XmlString时,顺序不正确。

您是否有想法在映射步骤或xml生成时强制执行订单?

2 个答案:

答案 0 :(得分:1)

您是否尝试使用参数“documentTypeName”为服务pub.xml提供完全限定的文档类型名称:documentToXMLString?文档“IntegrationServer内置服务参考”声明:

  

documentTypeName字符串可选描述输出结构和格式的文档类型的完全限定名称   document(例如,examples.rtd:exampleRecord1)。你可以用它   参数,以确保输出包含可能不包含的元素   在运行时出现在文档中,或描述其中的顺序   元素将出现在生成的XML字符串中。

编辑:添加示例,使用wM 9.7

E.g。我有一个xml字符串,如:

<?xml version="1.0"?>
<inputdoc>
    <field5>afds</field5>
    <field1>asdf</field1>
    <field3>asdf</field3>
    <field2>asdf</field2>
</inputdoc>

我有一个IS文档类型,其字段为field1,field2,field3和field5。我有一个服务,其中有一个名为xmlstring的输入,它包含上面的xml字符串。我称之为以下服务:

  1. pub.xml:xmlStringToXMLNode :将我的xml字符串映射到xmldata input-field
  2. pub.xml:xmlNodeToDocument :将我的节点转换为文档而不使用“documentTypeName”input-field
  3. pub.xml:documentToXMLString :使用带有我定义的IS doc类型的输入字段“documentTypeName”将我的文档实例转换为XML字符串。
  4. 这会产生以下XML字符串:

    <?xml version="1.0"?>
    <field1>asdf</field1>
    <field2>asdf</field2>
    <field3>asdf</field3>
    <field5>afds</field5>
    

    正如您所看到的,订单以正确的方式发生了变化。

    问候

    的Henning

答案 1 :(得分:1)

最简单的方法是修改XSD架构。使用XSD&#34;序列&#34; (XSD element Wiki)定义元素的特定顺序。完成后,在web方法中重新导入XSD。

如果无法修改XSD架构,则另一个选项是在流服务中创建一个循环,并为每个PersonalAddress将每个字段映射到规范/内部文档结构的字段。最后,在内部文档上调用documentToXMLString

最好的选择是设计一个不依赖于文档中元素顺序的解决方案。

希望这有帮助!