在Python 2-7中显示XML元素的所有可支持性

时间:2018-09-19 06:50:43

标签: python xml

我尝试用Python编写一个脚本,该脚本会自动生成其中包含一些信息的XML文件。

所以我陷入了困境。我有6个子元素。子元素的文本可以是0或1。 我想打印这6种元素的所有可能性。

我所拥有的:

listTCPFlag["fin","syn","rst","psh","ack","urg"]
lustTCPFlagAnswer = [0,1]

listProtocol = ['TCP','UDP','ICMP']
top = Element('Test')
ipHeader = SubElement(top, 'IpHeader')    
ipProtocol = SubElement(ipHeader,'protocol')

    for x in range(len(listProtocol)):
        ipProtocol.text = str(listProtocol[x])

        if(ipProtocol.txt == "TCP"):
             tcpHeader = SubElement(top, "tcpHeader")
             tcpPort = SubElement(tcpHeader,"destPort")
             tcpFlag = SubElement(tcpHeader, "flag")

             tcpFlagFin = SubElement(tcpFlag, "fin")
             tcpFlagSyn = SubElement(tcpFlag, "syn")
             tcpFlagRst = SubElement(tcpFlag, "rst")
             tcpFlagPsh = SubElement(tcpFlag, "psh")
             tcpFlagAck = SubElement(tcpFlag, "ack")
             tcpFlagUrg = SubElement(tcpFlag, "urg")


             # I tried to implement this in a for loop:

             for z in range(len(listTCPFlag)):
                 for u in range(len(listTCPFlagAnswer)):

                     if(listTCPFlag[z] == "fin"):
                           tcpFlagFin.text = str(listTCPFlagAnswer[u])

                     # ...

经过仔细的考虑和测试,我发现循环是错误的。.现在我陷入了思想空白,不知道如何解决此问题。。我的输出应为:

示例:

  1. <root>
    <element_1> 0 </element_1>
    <element_2> 0 </element_2>
    <element_3> 0 </element_3>
    <element_4> 0 </element_4>
    <element_5> 0 </element_5>
    <element_6> 0 </element_6>
    </root>

  2. <root>
    <element_1> 0 </element_1>
    <element_2> 0 </element_2>
    <element_3> 0 </element_3>
    <element_4> 0 </element_4>
    <element_5> 0 </element_5>
    <element_6> 1 </element_6>
    </root>

  3. <root>
    <element_1> 0 </element_1>
    <element_2> 0 </element_2>
    <element_3> 0 </element_3>
    <element_4> 0 </element_4>
    <element_5> 1 </element_5>
    <element_6> 0 </element_6>
    </root>

  4. <root>
    <element_1> 0 </element_1>
    <element_2> 0 </element_2>
    <element_3> 0 </element_3>
    <element_4> 1 </element_4>
    <element_5> 0 </element_5>
    <element_6> 0 </element_6>
    </root>

  5. ....

  6. (最终)

<root>
   <element_1> 1 </element_1>
   <element_2> 1 </element_2>
   <element_3> 1 </element_3>
   <element_4> 1 </element_4>
   <element_5> 1 </element_5>
   <element_6> 1 </element_6>
</root>

之后,我尝试使用“ add_binary_nums(x,y)”功能。像这样:https://www.w3resource.com/python-exercises/challenges/1/python-challenges-1-exercise-31.php

就我的观点,我更喜欢一个可以处理的for循环。但是我不知道如何构建。我如何在Python 2和For-loop中以简单的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

我想到的最简洁的方法是编写一个for循环,该循环遍历从0632^6 - 1 )的二进制文件,因为它会从000000111111。然后将每个数字分解为各个数字,并将每个数字放入您的<element>标签之一中。

这是一个例子:

all_possibilities = []

for n in range(2**6):
    binary = format(n, '06b')
    tcp_flag_elements = []
    for i in range(len(binary)):
        subelement = SubElement(tcpFlag, listTCPFlag[i])
        subelement.text = binary[i]
        tcp_flag_elements.append(subelement)
    all_possibilities.append(tcp_flag_elements)

这将为您提供列表all_possibilities,其中包含64个列表,每个子元素可能的配置都一个。