使用python从HTTP有效负载中过滤出大括号

时间:2017-06-11 12:12:44

标签: python xml

我试图用一个小的python脚本将一些http有效负载转换为有效的XML,但我似乎无法过滤出有效负载周围的花括号。我使用以下python代码:

print "Python Script: Convert To XML"

class Converter:
   def __init__(self,payload):
     self.xml=""
     self.xmlStart='<?xml version="1.0" ?><order>'
     self.xmlStop='</order>'
     self.payload=payload

   def convert2XML(self): 
     elements=self.payload.split(',')
     for item in elements:
       label,value = item.split('=')
       print "Label: %s, Value: %s" % (label,value)
       self.xml+="<"+label+">"+value+"</"+label+">"
     return self.xmlStart+self.xml+self.xmlStop

print "MESSAGE: ",message
print "PAYLOAD: ",payload
xml=Converter(payload)
result=xml.convert2XML()

输入有效负载是以下{itemA=value, itemB=value, itemC=value} 这导致了以下XML:

<?xml version="1.0" ?>
<order>
  <{itemA>value</{itemA>
  <itemB>value</itemB>
  <itemC>value}</itemC>
</order>

我尝试使用

等语句过滤掉大括号
text.replace('{', '')
text.replace('}', '')

不确定之前是否曾经问过这个问题,因为我的谷歌技能今天没有帮助我。

2 个答案:

答案 0 :(得分:0)

Python中的字符串是不可变的。相反,尝试构建一个新的字符串,如:

newPayload1 = oldPayload.replace("}", "")
newPayload2 = newPayload1.replace("{", "")

请告诉我们您是否尝试过此操作?

答案 1 :(得分:0)

您可以删除有效负载的第一个和最后一个字符,并用逗号分隔 使用XML时,您应该使用关注所有标记内容的lxml库以及更多内容:

from lxml import etree

def convert2XML(payload):
    root = etree.Element("order")

    for key, value in payload:
        sub = etree.SubElement(root, key)  # adds the sub elements to root element
        sub.text = value

    return etree.tostring(root, xml_declaration=True, encoding="utf-8")

payload = "{itemA=value, itemB=value, itemC=value}"
pay = [item.split('=') for item in payload[1:-1].split(', ')]
print(pay)  # >> pairs of item, value
xml = convert2XML(pay)
print(xml)

返回有效的xml字符串:

b"<?xml version='1.0' encoding='utf-8'?>\n<order><itemA>value</itemA><itemB>value</itemB><itemC>value</itemC></order>"