【问题标题】:lxml append array element python3.6lxml追加数组元素python3.6
【发布时间】:2022-01-06 00:05:11
【问题描述】:

我正在构建 xml 格式。

我想做这样的事情:

<ValidationRequest>
<Username>admin@xgateinternal.com</Username>
<Password>XBR!t6YMeJbmsjqV</Password>
<Email>12345@gmail.com</Email>
<Email>564685@yahoo.com.hk</Email>
<Email>54321@yahoo.com.hk</Email>
</ValidationRequest>

现在我可以将所有电子邮件附加到 ValidationRequest。但我得到了错误的格式。

这是我的代码:

#!/usr/bin/python
import lxml.etree
import lxml.builder    

email = ['12345@gmail.com','564685@yahoo.com.hk','54321@yahoo.com.hk']

E = lxml.builder.ElementMaker()
ValidationRequest = E.ValidationRequest
Username = E.Username
Password = E.Password
Email = E.Email

op = []
for a in email:
    GG = Email(a)
    op.append(lxml.etree.tostring(GG, pretty_print=True))
    print (lxml.etree.tostring(GG, pretty_print=True))
print(op)
ed = ''.join(map(str, op))
print(ed)
the_doc = ValidationRequest(
            Username('admin'),
            Password('XBR'),
            ed
        )   

print (lxml.etree.tostring(the_doc, pretty_print=True))

回应:

b'<Email>12345@gmail.com</Email>\n'
b'<Email>564685@yahoo.com.hk</Email>\n'
b'<Email>54321@yahoo.com.hk</Email>\n'
[b'<Email>12345@gmail.com</Email>\n', b'<Email>564685@yahoo.com.hk</Email>\n', b'<Email>54321@yahoo.com.hk</Email>\n']
b'<Email>12345@gmail.com</Email>\n'b'<Email>564685@yahoo.com.hk</Email>\n'b'<Email>54321@yahoo.com.hk</Email>\n'
b"<ValidationRequest><Username>admin</Username><Password>XBR</Password>b'&lt;Email&gt;12345@gmail.com&lt;/Email&gt;\\n'b'&lt;Email&gt;564685@yahoo.com.hk&lt;/Email&gt;\\n'b'&lt;Email&gt;54321@yahoo.com.hk&lt;/Email&gt;\\n'</ValidationRequest>\n"

我如何保留 并发布到 ValidationRequest?

【问题讨论】:

    标签: python lxml


    【解决方案1】:

    你的想法是对的,那里有很多东西只是在移动东西。你可以把它归结为:

    import lxml.etree
    import lxml.builder
    
    email = ['12345@gmail.com','564685@yahoo.com.hk','54321@yahoo.com.hk']
    
    em = lxml.builder.ElementMaker()
    
    the_doc = em.ValidationRequest(
        em.Username('admin'),
        em.Password('XBR'),
        *(em.Email(address) for address in email)
    )
    
    print(lxml.etree.tostring(the_doc, pretty_print=True).decode())
    

    .decode() 只是为了让它打印得很好。如果您需要 bytes,您可以不使用它。

    特别注意这一行:

        *(em.Email(address) for address in email)
    

    这循环email,为每个地址生成一个Email元素,然后将生成的元组(这是生成器周围括号的结果)解包到ValidationRequest的构造函数中元素。

    输出:

    <ValidationRequest>
      <Username>admin</Username>
      <Password>XBR</Password>
      <Email>12345@gmail.com</Email>
      <Email>564685@yahoo.com.hk</Email>
      <Email>54321@yahoo.com.hk</Email>
    </ValidationRequest>
    

    【讨论】:

    • 谢谢!!这对我有很大帮助
    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 2012-03-05
    • 2012-03-24
    • 1970-01-01
    • 2015-03-27
    • 2016-08-23
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多