首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python使用CDATA将数组转换为xml

Python使用CDATA将数组转换为xml
EN

Stack Overflow用户
提问于 2020-06-11 03:07:44
回答 1查看 141关注 0票数 0
代码语言:javascript
复制
    for index in rootless:
        if rootless[index] is not None:
            rootless[index] = "<![CDATA[" + str(rootless[index]) + "]]>"

    params_xml = xmltodict.unparse(rootless)

尝试在解析前添加到数组,但它转义了特殊的char结果

<city>&lt;![CDATA[new york]]&gt;</city><state>&lt;![CDATA[NY]]&gt;</state><zip>&lt;![CDATA[10036]]&gt;</zip><phone></phone>

我要找的是

<city><![CDATA[new york]]></city><state><![CDATA[NY]]></state><zip><![CDATA[10036]]></zip><phone></phone>

从技术上讲,我可以将></正则表达式转换为上面的文本,但可能有更好的方法

无根的看起来像这样

代码语言:javascript
复制
{
"city": "new york",
"state": "NY",
"zip": 10036,
"phone": ""
}
EN

回答 1

Stack Overflow用户

发布于 2020-06-11 04:47:54

这里有一种方法可以让你正确地插入CDATA,而不需要深入了解字典的结构等。

假设您的NYC地址和xml如下所示:

代码语言:javascript
复制
nyc = ["New York", "NY","10036"]
my_xml ="""<entry><city></city><state></state><zip></zip></entry>"""

在这种情况下,您需要:

代码语言:javascript
复制
from lxml import etree
doc = etree.fromstring(my_xml)
for a, b in zip(nyc,doc.xpath('/entry/*')):   
    b.text = etree.CDATA(a)
etree.tostring(doc).decode())

编辑:

代码语言:javascript
复制
items = {
"city": "new york",
"state": "NY",
"zip": 10036,
"phone": ""
}
my_xml ="""<entry><city></city><state></state><zip></zip><phone></phone></entry>"""

doc = etree.fromstring(my_xml)

for a, b in zip(list(items.values()),doc.xpath('/entry/*')):   
    b.text = etree.CDATA(str(a))
print(etree.tostring(doc).decode())

输出:

代码语言:javascript
复制
<entry><city><![CDATA[new york]]></city><state><![CDATA[NY]]></state><zip><![CDATA[10036]]></zip><phone><![CDATA[]]></phone></entry>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62311299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档