Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 元素树:如何查找具有特定值的所有子元素_Python_Elementtree - Fatal编程技术网

Python 元素树:如何查找具有特定值的所有子元素

Python 元素树:如何查找具有特定值的所有子元素,python,elementtree,Python,Elementtree,我有一个具有以下结构的XML文件: <?xml version="1.0"?> <data> <product> <Product_Code>code1</Product_Code> <Size>x</Size> <Quantity>1<Quantity> </product> <product> <Product_Code&g

我有一个具有以下结构的XML文件:

<?xml version="1.0"?>
<data>
<product>
    <Product_Code>code1</Product_Code>
    <Size>x</Size>
    <Quantity>1<Quantity>
</product>
<product>
    <Product_Code>code3</Product_Code>
    <Size>c</Size>
    <Quantity>5<Quantity>
</product>
<product>
    <Product_Code>code2</Product_Code>
    <Size>z</Size>
    <Quantity>2<Quantity>
</product>
<product>
    <Product_Code>code3</Product_Code>
    <Size>a</Size>
    <Quantity>1<Quantity>
</product>
<product>
    <Product_Code>code1</Product_Code>
    <Size>y</Size>
    <Quantirt>1<Quantity>
</product>
<product>
    <Product_Code>code3</Product_Code>
    <Size>b</Size>
    <Quantity>5<Quantity>
</product>
</data>
如果code=“code1”,我希望使用code=“code1”查找根中的所有其他元素及其相应的大小和数量值

我想生成以下XML:

<products>
    <product>
        <Product_Code>code1<Product_Code>
        <variants>
            <variant>
                <size>x</size>
                <quantity>1</quantity>
            </variant>
            <variant>
                <size>y</size>
                <quantity>1</quantity>
            </variant>
        </variants>
    </product>
    <product>
        <Product_Code>code2<Product_Code>
        <variants>
            <variant>
                <size>z</size>
                <quantity>2</quantity>
            </variant>
        </variants>
    </product>
    <product>
        <Product_Code>code3<Product_Code>
        <variants>
            <variant>
                <size>a</size>
                <quantity>1</quantity>
            </variant>
            <variant>
                <size>b</size>
                <quantity>5</quantity>
            </variant>
            <variant>
                <size>c</size>
                <quantity>5</quantity>
            </variant>
        </variants>
    </product>
</products>

代码1
x
1.
Y
1.
代码2
Z
2.
代码3
A.
1.
B
5.
C
5.

首先,您的xml无效,请参阅不匹配的
Quantity
Quantity
标记

无论如何,以下是如何获得每个代码的所有大小:

from xml.etree import ElementTree as ET


data = """<?xml version="1.0"?>
<data>
<product>
    <Product_Code>code1</Product_Code>
    <Size>x</Size>
    <Quantity>1</Quantity>
</product>
<product>
    <Product_Code>code3</Product_Code>
    <Size>c</Size>
    <Quantity>5</Quantity>
</product>
<product>
    <Product_Code>code2</Product_Code>
    <Size>z</Size>
    <Quantity>2</Quantity>
</product>
<product>
    <Product_Code>code3</Product_Code>
    <Size>a</Size>
    <Quantity>1</Quantity>
</product>
<product>
    <Product_Code>code1</Product_Code>
    <Size>y</Size>
    <Quantity>1</Quantity>
</product>
<product>
    <Product_Code>code3</Product_Code>
    <Size>b</Size>
    <Quantity>5</Quantity>
</product>
</data>"""

tree = ET.fromstring(data)

codes = {}
for product in tree.findall('.//product'):
    code = product.find('Product_Code').text
    size = product.find('Size').text
    quantity = product.find('Quantity').text

    codes[code] = codes[code] if code in codes else {}
    codes[code][size] = quantity

print codes

如何获得每个尺寸对应的数量。我想要
{code1:{x:1,y:1},code2:{z:2},code3:{a:1,b:5,c:5}
它有帮助,但不能有效地帮助我解决实际问题。我已更新了问题。这样,我必须首先生成字典,然后编写相应的XML。如果需要,我希望一次性完成possible@nish明白了,事实上它改变了游戏规则。我想你最初的问题已经得到了回答。我最好创建一个sepa为新任务的问题评分。谢谢。
from xml.etree import ElementTree as ET


data = """<?xml version="1.0"?>
<data>
<product>
    <Product_Code>code1</Product_Code>
    <Size>x</Size>
    <Quantity>1</Quantity>
</product>
<product>
    <Product_Code>code3</Product_Code>
    <Size>c</Size>
    <Quantity>5</Quantity>
</product>
<product>
    <Product_Code>code2</Product_Code>
    <Size>z</Size>
    <Quantity>2</Quantity>
</product>
<product>
    <Product_Code>code3</Product_Code>
    <Size>a</Size>
    <Quantity>1</Quantity>
</product>
<product>
    <Product_Code>code1</Product_Code>
    <Size>y</Size>
    <Quantity>1</Quantity>
</product>
<product>
    <Product_Code>code3</Product_Code>
    <Size>b</Size>
    <Quantity>5</Quantity>
</product>
</data>"""

tree = ET.fromstring(data)

codes = {}
for product in tree.findall('.//product'):
    code = product.find('Product_Code').text
    size = product.find('Size').text
    quantity = product.find('Quantity').text

    codes[code] = codes[code] if code in codes else {}
    codes[code][size] = quantity

print codes
{'code1': {'y': '1', 'x': '1'}, 'code2': {'z': '2'}, 'code3': {'a': '1', 'c': '5', 'b': '5'}}