我可以使用这个XML文件吗

2024-03-29 09:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试生成此xml文件:

<?xml version='1.0' encoding='UTF-8'?>
<portlet-preferences>
  <portlet-preference definitionLabel="SharedPreferencesPortlet" user="*">
    <preference name="serverinvoketimeout" description="The description" isModifiable="true" isMultivalued="false" value="360"/>
    <preference name="followchanges" description="The description" isModifiable="true" isMultivalued="false" value="false"/>
</portlet-preference>

使用以下脚本:

from lxml import etree
from lxml.builder import ElementMaker

E = ElementMaker()

format = E.portletpreference(
    E.preference(value="360", isMultivalued="false", isModifiable="true", description="The description", name="serverinvoketimeout"),
    E.preference(value="false", isMultivalued="false", isModifiable="true", description="The description", name="followchanges"),

    user="*",

    definitionLabel="SharedPreferencesPortlet"
    )
    root = E.portletpreferences(
             format,

    )

print(etree.tostring(root, xml_declaration=True, encoding='utf-8', pretty_print=True))

结果:

<?xml version='1.0' encoding='utf-8'?>
<portletpreferences>
  <portletpreference definitionLabel="SharedPreferencesPortlet" user="*">
    <preference isModifiable="true" isMultivalued="false"
name="serverinvoketimeout" value="360" description="The description"/>
    <preference isModifiable="true" isMultivalued="false"
name="followchanges" value="false" description="The description"/>
  </portletpreference>
</portletpreferences>

问题:

lxml适合这种情况吗? 怎样才能得到正确的订单? 例如:<preference name="serverinvoketimeout" description="The description" isModifiable="true" isMultivalued="false" value="360"/>
如何在元素名中获得符号? 示例:

<portlet-preferences>

Tags: thenamefalsetruevaluedescriptionxmlportlet
1条回答
网友
1楼 · 发布于 2024-03-29 09:25:12

Is lxml suitable for this case? How can get the right order? example:

<preference name="serverinvoketimeout" description="The description" isModifiable="true" isMultivalued="false" value="360"/>

How can get the minussign in the element name? example:

<portlet-preferences>

正如评论者提到的,属性的排序应该不重要。对于第二个问题,ElementMaker实例采用一个字符串进行构造,因此:

In [12]: f = E('portlet-preference', E.preference(value="360", isMultivalued="false", isModifiable="true", description="The description", name="serverinvoketimeout"),
    ...:                             E.preference(value="false", isMultivalued="false", isModifiable="true", description="The description", name="followchanges"),
    ...:       user="*",
    ...:       definitionLabel="SharedPreferencesPortlet")

In [22]: print(etree.tostring(f, encoding=str, pretty_print=True))

<portlet-preference user="*" definitionLabel="SharedPreferencesPortlet">
  <preference value="360" isMultivalued="false" isModifiable="true" description="The description" name="serverinvoketimeout"/>
  <preference value="false" isMultivalued="false" isModifiable="true" description="The description" name="followchanges"/>
</portlet-preference>



In [14]: root = E('portlet-preferences', f)

In [15]: print(etree.tostring(root, encoding=str, pretty_print=True))

<portlet-preferences>
  <portlet-preference user="*" definitionLabel="SharedPreferencesPortlet">
    <preference value="360" isMultivalued="false" isModifiable="true" description="The description" name="serverinvoketimeout"/>
    <preference value="false" isMultivalued="false" isModifiable="true" description="The description" name="followchanges"/>
  </portlet-preference>
</portlet-preferences>

相关问题 更多 >