如何在extjs 4中为XML Reader中的冒号(:)转义冒号(:)

时间:2013-12-24 07:21:30

标签: javascript xml extjs

我无法加载在属性名称中包含冒号的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'}
        ]
});

我尝试用|替换: (管道),但它对我不起作用。需要帮助。

2 个答案:

答案 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'}
    ]

});