2

在对 XML 序列化框架Simple XML in Java的易用性印象深刻之后,我尝试寻找一个 Python 对应物,它可以促进以类似方式实现类及其 XML 序列化。到目前为止,尽管有一些有趣的候选者(但据我所知,没有一个可以方便地使用decorators ),但我或多或少是空手而归;例如,我开始研究dexml,但我被一个简单的例子难住了,比如实现一个允许反序列化的类

<Error Code="0">OK</Error>

使用 Java 中的 Simple,我可以编写一个类,例如

@Root(name="Error")
public class Error {

    @Attribute(name = "Code")
    private int code;  // public getter and setter

    @Text(required = false) 
    private String description; // public getter and setter
}

Python 中是否已经有与 Simple for Java 类似的风格框架?我偏爱 Python 2.6 支持,尽管这不是强制性的;如果它仅支持 Python 3,我也会研究它。

4

2 回答 2

2

实际上,dexml 支持这种语法。我花了一段时间才弄清楚(阅读源代码有帮助)。

class Error(dexml.Model):
    code = dexml.fields.String()
    value = dexml.fields.String(tagname=".")

以下将返回desire的xml渲染:

e = Error(code="0",value="OK")
print e.render(fragment=True)
于 2013-11-12T21:41:02.930 回答
0

没有答案,但会确认使用 dexml 解析示例的难度。看起来没有一种方法可以解析具有属性和文本节点的元素。定义 Code 属性很简单:

class Error(dexml.Model):
    code = dexml.fields.String(attrname="Code")

但是没有办法引用子文本节点。一个人想做这样的事情:

class Error(dexml.Model):
    code = dexml.fields.String(attrname="Code")
    text = dexml.fields.String(textnode=True)

捕获文本的一种不太令人满意的方法是将其包装在额外的标签中:

<Error Code="0"><text>OK</text></Error>

然后你可以将类定义为:

class Error(dexml.Model):
    code = dexml.fields.String(attrname="Code")
    text = dexml.fields.String(tagname="text")
于 2013-11-09T04:08:28.080 回答