4

テンプレート XML ファイルがあり、プログラムに与えられた入力に基づいて、新しい XML ファイルを生成する必要があります。テンプレートには、入力データに基づいて繰り返す必要があるセクションがあります。しかし、これらのセクションの構造や、ネストのレベルがいくつあるかは必ずしもわかりません。テンプレートファイルを任意の方法で読み込む方法がわかりません。テンプレートファイルにデータを入力してから出力できます。テンプレート ファイルの一部を次に示します。

<Target_Table>
  <Target_Name>SF1_T1</Target_Name>
  <Target_Mode>
    <REP>
      <Target_Location_To_Repeat>
        <XLocation>nextXREL</XLocation>
        <YLocation>nextYREL</YLocation>
      </Target_Location_To_Repeat>
   <Target_Location_To_Repeat>
        <XLocation>nextXREL</XLocation>
        <YLocation>nextYREL</YLocation>
      </Target_Location_To_Repeat>
    </REP>
  </Target_Mode>
  <Target_Repetitions>1</Target_Repetitions>
  <Meas_Window>
    <Window_Size>
      <XLocation>FOV</XLocation>
      <YLocation>FOV</YLocation>
    </Window_Size>
    <Window_Location>
      <XLocation>firstXREL</XLocation>
      <YLocation>firstYREL</YLocation>
    </Window_Location>
  </Meas_Window>
  <Box_Orientation>90</Box_Orientation>
  <First_Feature Value="Space" />
  <Meas_Params_Definition>
    <Number_Of_Lines Value="Auto" />
    <Number_Of_Pixels_Per_Line Value="Auto" />
    <Averaging_Factor Value="1" />
  </Meas_Params_Definition>
  <Number_Of_Edges>1</Number_Of_Edges>
  <Edge_Pair>
    <Edge_Pair_Couple>
      <First_Edge>1</First_Edge>
      <Second_Edge>1</Second_Edge>
    </Edge_Pair_Couple>
    <Nominal_Corrected_Value>0</Nominal_Corrected_Value>
  </Edge_Pair>
  <Categories>
    <Material_Type />
    <Meas_Type />
    <Category_Type />
    <Other_Type />
  </Categories>
  <Bias>0</Bias>
  <Template_Target_Name>SF_IMAQ_Template_Target</Template_Target_Name>
  <Template_Target_PPL>
    <Process>PC2</Process>
    <Product>PD2</Product>
    <Layer>L2</Layer>
  </Template_Target_PPL>
  <Meas_Auto_Box>
    <Error_Code>0</Error_Code>
    <Measured_CD>0</Measured_CD>
    <Constant_NM2Pix>true</Constant_NM2Pix>
  </Meas_Auto_Box>
  <Meas_Box_Pix_Size_X>PixelSize</Meas_Box_Pix_Size_X>
  <Macro_CD>0</Macro_CD>
</Target_Table>

Target_Table セクション全体を複数回繰り返す必要があり、各 Target_Table 内で REP セクションを複数回繰り返す必要があります。テンプレートが変更された場合 (たとえば、ネストのレベルが追加された場合) にプログラムを変更する必要がないように、プログラムを作成したいと考えています。しかし、ファイルを読み込んで吐き出すには、ファイルの構造を完全に知っている必要があるように思えます。それは本当ですか、それともここで何か不足していますか? タグが不明でネストのレベルが不明なファイルを読み取るプログラムを作成する方法はありますか?

4

2 に答える 2

4

ElementTree の使用:

import xml.etree.ElementTree as et

filehandler = open("file.xml","r")
raw_data = et.parse(filehandler)
data_root = raw_data.getroot()
filehandler.close()

for children in data_root:
    for child in children:
        print(child.tag, child.text, children.tag, children.text)

これにより、XML タグとタグ内の関連テキストの概要がわかります。さらにループを追加してツリーにさらにステップインし、チェックを実行して、子のいずれかにさらにレベルが含まれているかどうかを確認できます。この方法は、XML タグの名前がさまざまで、既知の標準に従っていない場合に便利です。

于 2013-03-20T01:08:44.780 に答える
0

BeautifulSoupを使用した例:

import sys 
from bs4 import BeautifulSoup

file = sys.argv[1]
handler = open(file).read()
soup = BeautifulSoup(handler)

for table in soup.find_all("target_table"):
  for loc in table.find_all("rep"):
    print loc.xlocation.string + ", " + loc.ylocation.string

出力

nextXREL, nextYREL
于 2013-03-20T00:18:19.727 に答える