Javascript EXTJS 4.2 XML阅读器的XML标记中的转义冒号(:)

Javascript EXTJS 4.2 XML阅读器的XML标记中的转义冒号(:),javascript,xml,extjs,extjs4,cmis,Javascript,Xml,Extjs,Extjs4,Cmis,我试图将atom pub CMIS 1.0绑定加载到EXTJS中,标记中的冒号阻止了XML阅读器的工作。例如,xml看起来像: <atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis- open.org/ns/cmis/core/200908/" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/20

我试图将atom pub CMIS 1.0绑定加载到EXTJS中,标记中的冒号阻止了XML阅读器的工作。例如,xml看起来像:

<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-         open.org/ns/cmis/core/200908/" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/" xmlns:app="http://www.w3.org/2007/app">
  <atom:author>
      <atom:name>system</atom:name>
   </atom:author>
   <atom:id>http://chemistry.apache.org/MTAz</atom:id>
   <atom:published>2013-11-28T00:01:22Z</atom:published>
   <atom:title>Folder1</atom:title>
   <app:edited>2013-11-28T00:01:22Z</app:edited>
   <atom:updated>2013-11-28T00:01:22Z</atom:updated>
   <cmisra:object xmlns:ns3="http://docs.oasis-open.org/ns/cmis/messaging/200908/">
      <cmis:properties>
         <cmis:propertyId queryName="cmis:allowedChildObjectTypeIds" displayName="Allowed Child Types" localName="cmis:allowedChildObjectTypeIds" propertyDefinitionId="cmis:allowedChildObjectTypeIds">
            <cmis:value>*</cmis:value>
         </cmis:propertyId>
         <cmis:propertyId queryName="cmis:objectTypeId" displayName="Type-Id" localName="cmis:objectTypeId" propertyDefinitionId="cmis:objectTypeId">
            <cmis:value>cmis:folder</cmis:value>
         </cmis:propertyId>
         <cmis:propertyString queryName="cmis:path" displayName="Path" localName="cmis:path" propertyDefinitionId="cmis:path">
            <cmis:value>/Root/396271/Folder1</cmis:value>
         </cmis:propertyString>
         <cmis:propertyString queryName="cmis:name" displayName="Name" localName="cmis:name" propertyDefinitionId="cmis:name">
            <cmis:value>Folder1</cmis:value>
         </cmis:propertyString>
..... etc.
我应该为id或备用代码的映射写些什么

fields: [{  name: "id", mapping: 'id:number'} ????? escape the ':' some how?

如果可能的话,我会尽量避免编写大量定制的XML解析代码,并依赖EXTJS阅读器,我的ECM不提供CMIS 1.1浏览器绑定。

我发现解决方案在EXTJS 4中解决,但在我熟悉的早期版本(3.4)中没有:名称空间字符|是在EXTJS 4 DomQuery中引入的

因此,如果示例XML具有定义的名称空间,例如
xmlns:id=”http://my.example.com/id

那么,从之前修改名称空间的XML是:

<?xml version="1.0" encoding="UTF-8"?>
<users xmlns:id="http://my.example.com/id">
    <id:user attr="test ed">
        <id:id>1</id:id>
        <id:name>
            <id:first attr2="test ed 2">Ed</id:first>
            <id:last>Spencer</id:last>
        </id:name>
        <id:email>ed@sencha.com</id:email>
    </id:user>
    <id:user attr="test abe">
        <id:id>2</id:id>
        <id:name>
            <id:first attr2="test ed 2">Abe</id:first>
            <id:last>Elias</id:last>
        </id:name>
        <id:email>abe@sencha.com</id:email>
    </id:user>
</users>
还要注意,如果在定义名称空间之前在根元素中使用名称空间,那么XML读取器中的根定义需要使用:而不是|字符,即
root:'id:users'

我在使用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>
我尝试用|替换管道:但对我无效。需要帮助。

您需要在示例中的第一个标记中添加xmlns:ac=“”,以便定义名称空间。然后|将起作用。
<?xml version="1.0" encoding="UTF-8"?>
<users xmlns:id="http://my.example.com/id">
    <id:user attr="test ed">
        <id:id>1</id:id>
        <id:name>
            <id:first attr2="test ed 2">Ed</id:first>
            <id:last>Spencer</id:last>
        </id:name>
        <id:email>ed@sencha.com</id:email>
    </id:user>
    <id:user attr="test abe">
        <id:id>2</id:id>
        <id:name>
            <id:first attr2="test ed 2">Abe</id:first>
            <id:last>Elias</id:last>
        </id:name>
        <id:email>abe@sencha.com</id:email>
    </id:user>
</users>
<!DOCTYPE html>
<html>
<head>
<link href="http://cdn.sencha.com/ext/gpl/4.2.1/resources/css/ext-all.css" rel="stylesheet" />
<script src="http://cdn.sencha.com/ext/gpl/4.2.1/ext-all.js"></script>
<script>
function getResult()
{
 document.getElementById("demo").innerHTML= 
         "<p>First Record Id is: " + test.data.items[0].data.id + "</p>" +
         "<p> First Name is: " + test.data.items[0].data.first + "</p>" +
         "<p> Last Name is: " + test.data.items[0].data.last + "</p>" +
         "<p> Email is: " + test.data.items[0].data.email + "</p>" +
         "<p> Attribute 1 is: " + test.data.items[0].data.attr + "</p>" +
         "<p> Attribute 2 is: " + test.data.items[0].data.attr2 + "</p>";
}

var test;

Ext.onReady(function () {
   Ext.define('User', {
        extend: 'Ext.data.Model',
        autoload: true,
        fields: [{  name: "id", mapping: 'id|id'},
                         {  name: "first", mapping: 'id|name>id|first'},
                         {  name: "last", mapping: 'id|name>id|last'},
                         {  name: "email", mapping: 'id|email'},
                         {  name: "attr", mapping: '@attr'},
                         {  name: "attr2", mapping: "id|name>id|first[@attr2='test ed 2']"}]
    });

    var store = Ext.create('Ext.data.Store', {
        model: 'User',
        proxy: {
            type: 'ajax',
            url : 'users.xml',
            reader: {
                type: 'xml',
                record: 'id|user',
                root: 'users'
            }
        }
    }); 

    store.load();

    test = store;
});
</script>
</head>
<body>

<h1>EXTJS Example</h1>
<p id="demo">Here we try to load XML into an EXTJS XML Reader</p>

<button type="button" onclick="getResult();">getResult</button>

</body>
</html> 
<RDF>
    <Seq about="urn:productManagement:root" type="ROOT" ac:maxLevels="25">
        <li>
            <Description ac:name="name1" ac:type="type1"/>
        </li>
    </Seq>
</RDF>
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'}
        ]
});