2010-11-20 33 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