我无法加载在属性名称中包含冒号的xml,我使用的是extjs-4.2.1
我的样本xml
<RDF>
<Seq about="urn:productManagement:root" type="ROOT" ac:maxLevels="25">
<li>
<Description ac:name="name1" ac:type="type1"/>
</li>
</Seq>
</RDF>
以上xml的模型
Ext.define('TR.model.TreeControlModel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'about', mapping:'@about'},
{ name: 'type', mapping:'li>Description@ac:type'},
{ name: "name", mapping:'li>Description@ac:name'}
]
});
我尝试用|替换: (管道),但它对我不起作用。需要帮助。
答案 0 :(得分:3)
Colon是XML标识符中的保留字符,仅可用于绑定XML命名空间。没有办法逃避它用于其他目的。您 MAY 能够找到XML的前命名空间实现,它不会检查这个并让您放弃滥用冒号字符,但您的文档将无法与任何其他代码互操作处理XML。
请参阅http://www.w3.org/TR/REC-xml/#sec-common-syn中的注释和http://www.w3.org/TR/REC-xml-names/
使用其他字符,或正确声明ac:名称空间前缀。
答案 1 :(得分:1)
这是一个EXTJS问题,您需要在XML中定义命名空间。
在这个例子中
<RDF xmlns:ac="http://my.example.com/ac">
<Seq about="urn:productManagement:root" type="ROOT" ac:maxLevels="25">
<li>
<Description ac:name="name1" ac:type="type1"/>
</li>
</Seq>
</RDF>
我将http://my.example.com/ac作为前缀的定义,因为我不确定它在你的例子中应该是什么(你是自己做的还是来自另一个系统?)。然后EXTJS 4(不是3或更低)允许使用|所以这应该有效:
Ext.define('TR.model.TreeControlModel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'about', mapping:'@about'},
{ name: 'type', mapping:'li>Description@ac|type'},
{ name: "name", mapping:'li>Description@ac|name'}
]
});