如何用BeautifulSoup替换/删除XML标签?

时间:2016-11-16 20:40:21

标签: python xml beautifulsoup

我在本地文件中使用XML,该文件是获得POST REST服务<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <root> <singleElement> <subElementX>XYZ</subElementX> </singleElement> <repeatingElement id="11" name="Joe"/> <repeatingElement id="12" name="Mary"/> </root> 的最终邮件的模板。该脚本在发布之前预先处理模板数据。

所以模板看起来像这样:

repeatingElement

消息XML应该看起来相同,只是xmlData = None with open('conf//test1.xml', 'r') as xmlFile: xmlData = xmlFile.read() xmlSoup = BeautifulSoup(xmlData, 'html.parser') repElemList = xmlSoup.find_all('repeatingelement') for repElem in repElemList: print("Processing repElem...") repElemID = repElem.get('id') repElemName = repElem.get('name') # now I do something with repElemID and repElemName # and no longer need it. I would like to replace it with <somenewtag/> # and dump what is in the soup object back into a string. # is it possible with BeautifulSoup? 标记需要替换为其他内容(脚本根据现有标记中的属性生成的XML)。

到目前为止,这是我的脚本:

html.parser

我可以用其他东西替换重复元素,然后将汤对象转储到我可以发布到REST API的新字符串中吗?

注意:我正在使用$price=number_format($special_price,2,'.',''); ,因为我can't get the xml parser to work但它运行正常,理解HTML比XML解析更宽松。

1 个答案:

答案 0 :(得分:1)

您可以使用.replace_with().new_tag()方法:

for repElem in repElemList:
    print("Processing repElem...")
    repElemID = repElem.get('id')
    repElemName = repElem.get('name')

    repElem.replace_with(xmlSoup.new_tag("somenewtag"))

然后,您可以使用str(soup)soup.prettify()转储“汤”。