jsonix - 如何创建一个有前缀但没有命名空间的元素?
Posted
技术标签:
【中文标题】jsonix - 如何创建一个有前缀但没有命名空间的元素?【英文标题】:jsonix - How to create an element with prefix and without namespace? 【发布时间】: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'
,
这将导致以下结果:
<c:condition xmlns:c="c">
任何人都知道如何使用 Jsonix 来生成所需的 Qname - “c:condition” 没有命名空间URI?
【问题讨论】:
【参考方案1】:在您的示例中,前缀 c
实际上绑定到此行中的命名空间 http://some.com/xsd/complexCondition
:
<filters xmlns:a="http://some.com/xsd/atomicCondition" xmlns:c="http://some.com/xsd/complexCondition">
a
和 c
两个前缀都绑定到 filters
元素范围内的非空命名空间。
所以你实际上应该这样做:
type: 'element',
name: 'ccondition',
elementName:
localPart: 'condition',
prefix: 'c',
namespaceURI: 'http://some.com/xsd/complexCondition'
,
typeInfo: 'DOXML.ComplexCondition'
我认为您应该能够使用 namespaceURI: ''
映射到空命名空间,但如果我没看错的话,这不是您所需要的。
【讨论】:
嗨词典!是的,它仍然以<c:condition xmlns:c= " ">
结尾,仍然与上面提供的 XML 格式不匹配。预期是<c:condition>
。
您似乎忽略了我的回答部分,我说您实际上在这里有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'
,结果将是<c:condition xmlns:c= "http://some.com/xsd/complexCondition ">
使用上下文将namespaceURI
添加到<filters>
,Jsonix仍然不允许namespaceURI=''
然后用它映射 我从来没有说过“然后”。我说你应该可以使用空命名空间(namespaceURI: ''
),但这不是你想要的。以上是关于jsonix - 如何创建一个有前缀但没有命名空间的元素?的主要内容,如果未能解决你的问题,请参考以下文章