2010-11-20 34 views
3

我有一个appengine应用程序与两种简单的实体 - ParentEntity s和ChildEntity s。每个ParentEntity拥有一个拥有ChildEntity s。appengine bulkdownloader与嵌套实体的xml

@PersistenceCapable 
public class ParentEntity 
{ 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key key; 

    @Persistent 
    private String name; 

    @Persistent(defaultFetchGroup=true) 
    private List<ChildEntity> children; 

... 

同样定义了ChildEntity。

现在,我想使用http://bulkloadersample.appspot.com/中描述的技术从数据存储区下载我的所有数据。在他们的例子中,他们设法将数据导出到嵌套在父实体内的拥有实体的xml文件中。但是,当我尝试使用以下配置(非常类似他们的配置 - 请参阅http://bulkloadersample.appspot.com/showfile/bulkloader_visitactivity.yaml并查看activities属性),我遇到了错误。

- kind: ParentEntity 
    connector: simplexml 
    connector_options: 
    xpath_to_nodes: /Parents/ParentEntity 
    style: element_centric 

    property_map: 
    - property: __key__ 
     external_name: key 
     export_transform: transform.key_id_or_name_as_string 

    - property: children 
     external_name: Children 
     import_transform: 
     transform.list_from_child_node('Children/ChildEntity') 
     export_transform: 
     transform.child_node_from_list('ChildEntity') 


- kind: ChildEntity 
    connector: simplexml 
    connector_options: 
    xpath_to_nodes: /Children/ChildEntity 
    style: element_centric 

    property_map: 
    - property: __key__ 
     external_name: key 
     export_transform: transform.key_id_or_name_as_string 

我得到以下错误:

google.appengine.ext.bulkload.bulkloader_errors.ErrorOnTransform: Error on trans 
form. Property: children External Name: Children. Code: transform.ch 
ild_node_from_list('ChildEntity') Details: 'NoneType' object is not iterable 

大更新:

我创造了这个示例应用程序,你可以实际查看和下载和测试

http://rileylark.appspot.com

你可以看到输出我想要http://rileylark.appspot.com/view

下载eclipse项目来查看它是如何工作的。

我想为我的500点是可以为母公司数据和ChildEntities导出到嵌套XML与appcfg.py download_data

+0

为什么你使用transform.child_node_from_list('GradingPeriod') 而不是transform.list_from_child_node('GradingPeriod')在链接的例子中使用? – systempuntoout 2010-11-22 23:14:45

+0

我在做一个预感,就是这样。我在任何地方都没有看到任何权威的文档,其他一些网站使用child_node_from_list,而且好像我想从列表中创建一个子节点。我也尝试了list_from_child_node,但也得到了一堆其他的错误。 – 2010-11-23 05:05:23

+0

从中取出“children”的“list”似乎总是“None”。 – hleinone 2010-12-10 01:12:19

回答

0

尝试使用工作config.yaml文件:

transform.list_from_child_node('GradingPeriods/GradingPeriod', suppress_blank=True) 
+0

由于出口转型?在转换时出现'google.appengine.ext.bulkload.bulkloader_errors.ErrorOnTransform:错误。属性:gradingPeriods外部名称:GradingPeriods。代码:transform.list_from_child_node('GradingPeriods/GradingPeriod',True)详细信息:'__node __''。 – 2010-11-23 20:23:43

+0

尝试'transform.list_from_child_node('GradingPeriods/GradingPeriod',suppress_blank = True)' – 2010-11-23 20:56:44

+0

不,不,作为导入变换 – 2010-11-23 21:13:02