1

現在、Python での XSLT 変換に lxml を使用しています。変換後、コンテンツを別のファイルに書き込む必要があります。理解を深めるために、私のコードは次のとおりです。

    ##function to create a new file and write the result into the file 
    def  new_file(a,b):
        full_path = 'path of teh folder to create the file'+a
        file_new = open(full_path, 'w')
        file_new.write(b)


    if xmlRoot.xpath('//slide[@nav_lvl_1="x" and @nav_lvl_2="y"]'):

        ##xpath to get the all the selected nodes of the attributes x and y
        slide_list = xmlRoot.xpath('//slide[@nav_lvl_1="x" and @nav_lvl_2="y"]')

        ##loop against the obtained list of node element
        for each_slide in slide_list:
            xslRoot = etree.parse('path of xsl_file')
            transform = etree.XSLT(xslRoot)
            newdom = transform(xmlRoot)
            file_name =  ('slide'+each_slide.get('page_number')+'.xml')
            result = etree.tostring(newdom, pretty_print=True)
            print etree.tostring(newdom, pretty_print=True)
            new_file(file_name , result)

次のコードはまったく問題なく動作しますが、関数を呼び出してファイルを作成し、結果を書き込むと、結果のループ部分ではなく、結果全体がファイルに書き込まれます。

例: then に 5 つのノード要素があるslide_list場合、ファイルxslRoot は異なる値に対して 5 回変換されます。そして、変換ごとに、結果を 5 つの異なるファイルに書き込む必要があります。このコードを実行すると、作成された 5 つのファイルすべてに 5 つの変換結果がすべて含まれます。ファイルごとに必要な結果は 1 つだけです。

私がした間違いは何ですか。理解できません。助言がありますか?

入力 Xml は次のようになります。

- <slide add_info="Merchandising" name="slide8.xml" nav_lvl_1="x" nav_lvl_2="y" page_number="8">
    and ....

- <slide add_info="Merchandising" name="slide8.xml" nav_lvl_1="x" nav_lvl_2="y" page_number="9">
    and ...

- <slide add_info="Merchandising" name="slide8.xml" nav_lvl_1="x" nav_lvl_2="y" page_number="10">
    and ...

- <slide add_info="Merchandising" name="slide8.xml" nav_lvl_1="x" nav_lvl_2="y" page_number="11">

    and so on...
4

1 に答える 1

2

問題は、ループの繰り返しごとにファイル全体を結果にロードしていることだと思います。現在の反復への唯一の参照は、ファイル名を割り当てるときです。

file_name =  ('slide'+each_slide.get('page_number')+'.xml')

この「each_slide」以外は、ドキュメント全体ではなくサブセットを取得するためにどこにも参照されません。

于 2013-07-24T16:43:36.130 に答える