4

BS4 を使用して XML ファイルを解析し、それを新しい XML ファイルに書き戻そうとしています。

入力ファイル:

<tag1>
  <tag2 attr1="a1"> example text </tag2>
  <tag3>
    <tag4 attr2="a2"> example text </tag4>
    <tag5>
      <tag6 attr3="a3"> example text </tag6>
    </tag5>
  </tag3>
</tag1>

脚本:

soup = BeautifulSoup(open("input.xml"), "xml")
f = open("output.xml", "w") 
f.write(soup.encode(formatter='minimal'))
f.close()

出力:

<tag1>
<tag2 attr1="a1"> example text </tag2>
<tag3>
<tag4 attr2="a2"> example text </tag4>
<tag5>
<tag6 attr3="a3"> example text </tag6>
</tag5>
</tag3>
</tag1>

入力ファイルのインデントを保持したい。prettify オプションを使ってみました。

出力整形:

<tag1>
  <tag2 attr1="a1"> 
    example text 
  </tag2>
  <tag3>
    <tag4 attr2="a2"> 
      example text 
    </tag4>
    <tag5>
      <tag6 attr3="a3"> 
        example text 
      </tag6>
    </tag5>
   </tag3>
</tag1>

しかし、これは私が望んでいたものではありません。入力ファイルと同じように、タグの正確なインデントを維持したいと考えています。

4

1 に答える 1

2

残念ながら、直接アクセスすることはできません。美しいスープはその入力を解析し、元のフォーマットの痕跡を保持しません。

したがって、XML を変更しない場合は、まずメモリ内の文字列全体として読み取り、その文字列を BS に入力して解析し、テストを行い、それを使用して新しいファイルに書き戻すことができます。

XML を変更して特別なフォーマットを使用する場合は、BS ツリーをナビゲートして手動でフォーマットする必要があります。

于 2015-04-23T15:33:14.513 に答える