如何从Sencha Touch中的XML Store获取特定节点值

时间:2013-07-22 12:16:23

标签: xml-parsing sencha-touch sencha-touch-2 sencha-architect

我有以下XML结构,我希望在 Tab,Topic,SubTopic和Screen 的基础上动态获取Fields标记值;这可能吗? Plz让我知道适当的解决方案。

XML结构:

<?xml version="1.0" encoding="utf-8"?>
<Settings>
<ABC TYPE="Tab">
<Trans TYPE="Topic">
  <Rpt TYPE="SubTopic">
    <File TYPE="Screen">
      <Fields>
        <Tin>10</Tin>
        <Pin>8</Pin>
      </Fields>
    </File>
  </Rpt>
</Trans>
</ABC>
<XYZ TYPE="Tab">
<Trans TYPE="Topic">
  <Rpt TYPE="SubTopic">
    <File TYPE="Screen">
      <Fields>
        <Tin>10</Tin>
        <Pin>8</Pin>
      </Fields>
    </File>
  </Rpt>
</Trans>
  </XYZ>
 </Settings>

模型结构:

Ext.define('MyApp.model.ScreenValidation', {
    extend: 'Ext.data.Model',

    config: {
        fields: [
            {
                name: 'Tin',
                type: 'string'
            },
            {
                name: 'Pin',
                type: 'string'
            }
        ]
    }
});

XMLStore Strucuter:

    Ext.define('MyApp.store.ScreenValidation', {
    extend: 'Ext.data.Store',

    requires: [
        'MyApp.model.ScreenValidation'
    ],

    config: {
        autoLoad: true,
        model: 'MyApp.model.ScreenValidation',
        storeId: 'ScreenValidation',
        proxy: {
            type: 'ajax',
            url: 'ScreenValidation.xml',
            reader: {
                type: 'xml',
                record: 'Fields'
            }
        }
    }
});

任何帮助表示赞赏!!

1 个答案:

答案 0 :(得分:0)

如果您有权修改xml结构,我建议您这样做。

<?xml version="1.0" encoding="utf-8"?>
<Settings>
  <Setting>
    <type>Tab</type>
    <transType>Topic</transType>
    <rptType>SubTopic</rptType>
    <fileType>Screen</fileType>
    <Fields>
      <Tin>10</Tin>
      <Pin>8</Pin>
      </Fields>
    </File>
  </Setting>

  ....ETC
</Settings

如果您无法访问api以便您可以更改格式,我认为您将被卡住:

1:使用标准的ajax请求获取xml响应,并手动或使用库解析xml结果,然后手动填充MyApp.model.ScreenValidation对象。

2:扩展/覆盖Ext.data.reader.Xml类并使其将您想要的信息解析到模型中。

我希望你能访问api,因为后两种解决方案听起来都很糟糕。此外,我从未试图解决这样的问题,所以我可能会忽略一个更简单的解决方案。

我期待着听到你如何实现这一目标。

祝你好运,布拉德