0

無視したい特定のタグを除いて、複数の同一のタグからタグ値を取得しようとしています。xml は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://apple.com/itunes/importer" version="film5.1">
    <provider>studiocanal</provider>
    <language>en-GB</language>
    <video>
        <crew>
            <crew_member billing="top">
                <display_name>John Doe</display_name>
                <roles>
                    <role>Director</role>
                    <role>Screenwriter</role>
                </roles>
            </crew_member>
            <crew_member billing="ordered">
                <display_name>Harry Smith</display_name>
                <roles>
                    <role>Screenwriter</role>
                </roles>
            </crew_member>
            <crew_member billing="ordered">
                <display_name>Jane Doe</display_name>
                <roles>
                    <role>Screenwriter</role>
                </roles>
            </crew_member>
            <crew_member billing="ordered">
                <display_name>Mr. Kimbley</display_name>
                <roles>
                    <role>Producer</role>
                </roles>
            </crew_member>
        </crew>
    </video>
</package>

2番目の値を無視して値を取得し、それをリストに入れる必要があります.John Doeセクションから最初の値のみを取得したい. 私はそれを機能させることができないようです。これは私の現在のコードで、リストを作成して入力しますが、5 つの役割がありますが、必要なのは 4 つだけで、2 番目の役割はスキップします。私の現在のコードは次のとおりです。

from lxml import etree
tree = etree.fromstring(templateXml)
crewList2 = []
for element in root.xpath('//video/crew/crew_member/roles/role'):
    crewList2.append( element )
4

2 に答える 2

1

私は一緒に行きます:

crewList2 = []
for element in tree.xpath('//video/crew/crew_member/roles'):
    role = element.xpath('.//role[1]')
    if role:
        crewList2.append(role[0].text)

print crewList2

プリント:

['Director', 'Screenwriter', 'Screenwriter', 'Producer']
于 2013-08-12T14:30:04.397 に答える
0

1 つの XPath 式、名前空間の登録、およびlxml.etree.tostring(..., method="text"):

roles = tree.xpath('//it:video/it:crew/it:crew_member/it:roles/it:role[1]', namespaces={"it": "http://apple.com/itunes/importer"})
crewList2 = [etree.tostring(e, method="text", encoding=unicode).strip() for e in roles]
于 2013-08-12T15:20:37.157 に答える