这与a previous question of mine有关,但有新信息。
我正在尝试配置bulkdownloader以从我的Java appengine应用程序下载数据,使得拥有对象列表转换为每个父对象内的嵌套XML路径。我一直在使用导出转换transform.child_node_from_list
。但是,list属性实际上从未被下载并传递给该转换!
这看起来类似于在appengine数据存储区查看器中查看实体时所获得的效果 - 父实体根本不显示list属性。您必须通过代码访问它。
我的问题是:如何使用批量下载程序访问此列表属性?如果我使用--kind=ParentEntity
下载,您认为这会阻止它下载任何ChildEntity
的内容吗? (有没有办法指定“所有种类”或其他什么?)
在python下载配置中,模型实际上直接引用到配置文件中。我是否需要模拟一个模仿我的JDO模型并使用该引用的python模型?
作为参考,我的每个文件的缩写版本如下:
downloadconfig.yaml:
transformers:
- kind: ParentEntity
connector: simplexml
connector_options:
xpath_to_nodes: /Parents/Parent
style: element_centric
property_map:
- property: __key__
external_name: key
export_transform: transform.key_id_or_name_as_string
- property: name
external_name: name
# Type: String Stats: 30 properties of this type in this kind.
- property: children
external_name: Children
import_transform:
transform.list_from_child_node('Children/Child')
export_transform:
transform.empty_if_none(transform.child_node_from_list('Child'))
ParentEntity.java:
package experiment.dataexport;
import java.util.List;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import com.google.appengine.api.datastore.Key;
@PersistenceCapable
public class ParentEntity
{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
public Key key;
@Persistent
public String name;
@Persistent(defaultFetchGroup = "true")
public List<ChildEntity> children;
}
示例XML输出:
<Parents>
<Parent>
<name>Parent 5613</name>
<key>72001</key>
<Children></Children>
</Parent>
<Parent>
<name>Parent 1237</name>
<key>73001</key>
<Children></Children>
</Parent>
</Parents>
(每个<Child>
节点中应该有多个<Children>
元素,但下载程序正在检索None
而不是正确的子列表。