【问题标题】:jsonix - How to create an element with prefix and without namespace?jsonix - 如何创建一个有前缀但没有命名空间的元素?
【发布时间】:2017-07-06 12:08:51
【问题描述】:

我需要发送包含以下元素的 XML:

<return>
    <getrooms>true</getrooms>
    <filters xmlns:a="http://some.com/xsd/atomicCondition" xmlns:c="http://some.com/xsd/complexCondition">
        <city></city>
        <country></country>
        <c:condition>
            <a:condition>
                <fieldname>fieldName</fieldname>
                <fieldtest>fieldTest</fieldtest>
                <fieldvalues>
                    <fieldvalue>fieldValue</fieldvalue>
                </fieldvalues>
            </a:condition>
            <operator>operator</operator>
            <a:condition>
                <fieldname>fieldName</fieldname>
                <fieldtest>fieldTest</fieldtest>
                <fieldvalues>
                    <fieldvalue>fieldValue</fieldvalue>
                 </fieldvalues>
            </a:condition>
         </c:condition>
    </filters>
    <resultsperpage></resultsperpage>
    <page></page>
</return>

我在使用 Jsonix 形成“c:condition”和“a:condition”Qname 时遇到了困难。两个 Qname 都包含前缀但没有命名空间。

我当前的代码是:

{
    type: 'element',
    name: 'ccondition',
    elementName: {
        localPart: 'condition',
        prefix: 'c',
        namespaceURI: 'c'
    },
    typeInfo: 'DOXML.ComplexCondition'
},

这将导致以下结果:

&lt;c:condition xmlns:c="c"&gt;

任何人都知道如何使用 Jsonix 来生成所需的 Qname - “c:condition” 没有命名空间URI?

【问题讨论】:

    标签: namespaces prefix jsonix


    【解决方案1】:

    在您的示例中,前缀 c 实际上绑定到此行中的命名空间 http://some.com/xsd/complexCondition

    <filters xmlns:a="http://some.com/xsd/atomicCondition" xmlns:c="http://some.com/xsd/complexCondition">

    ac 两个前缀都绑定到 filters 元素范围内的非空命名空间。

    所以你实际上应该这样做:

    { type: 'element', name: 'ccondition', elementName: { localPart: 'condition', prefix: 'c', namespaceURI: 'http://some.com/xsd/complexCondition' }, typeInfo: 'DOXML.ComplexCondition' }

    我认为您应该能够使用 namespaceURI: '' 映射到空命名空间,但如果我没看错的话,这不是您所需要的。

    【讨论】:

    • 嗨词典!是的,它仍然以&lt;c:condition xmlns:c= " "&gt; 结尾,仍然与上面提供的 XML 格式不匹配。预期是&lt;c:condition&gt;
    • 您似乎忽略了我的回答部分,我说您实际上在这里有xmlns:c="http://some.com/xsd/complexCondition"。因此,您应该使用namespaceURI: 'http://some.com/xsd/complexCondition'
    • 嗨@lexicore 我不明白你的意思是使用namespaceURI: 'http://some.com/xsd/complexCondition',然后用namespaceURI: '' 映射它。按照下面的{ type: 'element', name: 'ccondition', elementName: { localPart: 'condition', prefix: 'c', namespaceURI: 'http://some.com/xsd/complexCondition' }, typeInfo: 'DOXML.ComplexCondition' },结果将是&lt;c:condition xmlns:c= "http://some.com/xsd/complexCondition "&gt;
    • 使用上下文将namespaceURI添加到&lt;filters&gt;,Jsonix仍然不允许namespaceURI=''
    • 然后用它映射 我从来没有说过“然后”。我说你应该可以使用空命名空间(namespaceURI: ''),但这不是你想要的。
    猜你喜欢
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多