我想以级联的方式在XML中存储一些相对简单的东西。我们的想法是构建可以有许多参数集,Python脚本通过读取这些集合来创建必要的构建工件(* .h等),如果两个集合具有相同的参数,则后者替换前者。
有(至少)两种不同的XML方式:
第一种方式:
<Variants>
<Variant name="foo" Info="foobar">1</Variant
</Variants>
第二种方式:
<Variants>
<Variant>
<Name>Foo</Name>
<Value>1</Value>
<Info>foobar</Info>
</Variant>
</Variants>
在ElementTree中哪一个更容易处理。我有限的理解声称它将是第一个,因为我可以轻松地使用find()搜索变体并接收整个子树但是用第二种风格来做它同样容易吗?我的同事说后者的XML更好,因为它允许更容易地扩展XML(他显然是对的)但我不认为可扩展性是目前的一个主要因素(很可能我们永远不会需要它)。
编辑:我当然可以使用lxml,在这种情况下是否重要?速度确实不是问题,文件相对较小。答案 0 :(得分:3)
你是对的,但我会尽可能选择#1,除了文字内容:
name
或info
的多个值(或文本内容值)......因为您可以元素上具有多个具有相同名称的属性(也没有多个文本内容节点,但两者之间没有任何内容)。但是,您仍然可以通过各种技术扩展它们,例如属性中以空格分隔的值,或添加子元素作为属性的替代值。关于XML元素与vs属性争论的一些好文章,包括何时使用每个:
另见this SO question(但我认为上述内容可以提供更有利可图的阅读)。
答案 1 :(得分:1)
记住XML属性的关键限制:
换句话说,属性表示键/值对。如果你可以在Python中将它表示为一个字典,其键是XML名称并且其值是字符串,那么无论“它”是什么,你都可以将它表示为一组属性。
如果你不能 - 例如,如果排序很重要,或者你需要一个值来包含子元素 - 那么你就不应该使用属性。