appengine bulkdownloader到嵌套实体的xml

时间:2010-11-20 04:05:56

标签: google-app-engine google-cloud-datastore

我有一个带有两种简单实体的appengine应用程序 - ParentEntityChildEntity。每个ParentEntity都拥有ListChildEntity

@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

看到输出 WANT

下载eclipse项目,了解它的工作原理。

我想要的500分是一个有效的config.yaml文件,可以使用appcfg.py download_data

将Parent和ChildEntities的数据导出为嵌套XML

1 个答案:

答案 0 :(得分:0)

尝试使用:

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