用python从HTTP负载中过滤出花括号

2024-09-29 02:24:25 发布

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

我试图用一个小的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('}', '')

我不确定以前是否有人问过这个问题,因为我的谷歌技能今天对我没有帮助。你知道吗


Tags: selfvalueversiondeforderxmllabelconverter
2条回答

您可以去掉有效负载的第一个和最后一个字符,并在逗号处拆分。
在使用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>"

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

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

告诉我们你是不是试过了?你知道吗

相关问题 更多 >