3

私が扱っている XML ファイルには一貫性のないサブ要素が含まれているため、ファイルのさらに下まで一連の要素に表示されない特定のサブ要素を見つけて編集するのに苦労しています。Python 2.7.1 に含まれている Python の ElementTree を使用しています。

私が扱っている XML ファイルのタイプの例を次に示します。

<?xml vin="1.0" encoding="UTF-8" standalone="yes"?>

<whatever id='Subaru' YouCanDriveMyCar='Wednesday' transmission='stick'>
        <model id='Ford' year='1972'>A</model>
        <model id='Chevrolet' vin="1234567890" stereo='Alpine' airconditioning='notworking'>Volt</model>
        <model id='Dodge' vin="3456789012" airconditioning='working'>Durango</model>
        <model id='Mercedes' vin="4567890123" airconditioning='none'>S150</model>
        <model id='BMW'>M350</model>
        <model id='Volkswagen' vin="5678901234" stereo='Sony'>Beetle</model>
        <model id='Honda' vin="6789012345" airconditioning="blowsicecubes">Accord</model>
</whatever>

この例では、モデル id='Volkswagen' を特定し、stereo='Sony' を 'Blaupunkt' に変更します。

ElementTree を使用して属性「stereo」を検索すると、ファイルの上部にある要素に「stereo」が含まれていないため、エラーが発生します。

どんな助けやヒントも大歓迎です。

4

1 に答える 1

3

単純な XPath 式を使用して、適切なモデルを見つけます。

volkswagen = tree.find('.//model[@id="Volkswagen"]')

stereo次に、属性を調整します。

volkswagen.set('stereo', 'Blaupunkt')

属性modelを持つ要素を検索することもできます。stereo

models_with_stereos = tree.findall('.//model[@stereo]')

次に、それらの要素をさらにフィルタリングします。

(ElementTree API の代替実装)を使用するように切り替えた場合lxmlは、さらに複雑な XPath 式を使用できます。これには、model要素とid="Volkswagen"属性stereoのみの一致が含まれます。

于 2013-03-03T18:04:31.447 に答える