4

bs4 を使用して xml ファイルを解析し、再度新しい xml ファイルに書き戻しています。

入力ファイル:

<tag1>
  <tag2 attr1="a1">&quot; example text &quot;</tag2>
  <tag3>
    <tag4 attr2="a2">&quot; example text &quot;</tag4>
    <tag5>
      <tag6 attr3="a3">&apos; example text &apos;</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>

&quot;と を保持したい&apos;。エンコード フォーマッターのすべてのオプション (Minimal、xml、html、none) を使用してみました。しかし、それらのどれもこの問題を解決しませんでした。

&quot; 次に、 " を手動で置き換えてみました。

for tag in soup.find_all(text=re.compile("\"")):
    res = tag.string
    res1 = res.replace("\"","&quot;")
    tag.string.replaceWith(res1)

しかし、これにより以下の出力が得られました

<tag1>
  <tag2 attr1="a1"> &amp;quot; example text &amp;quot;  </tag2>
  <tag3>
    <tag4 attr2="a2"> &amp;quot; example text &amp;quot; </tag4>
    <tag5>
      <tag6 attr3="a3"> &apos; example text &apos; </tag6>
    </tag5>
  </tag3>
</tag1>

& を に置き換えます&amp;。私はここで混乱しています。これを解決するのを手伝ってください。

4

1 に答える 1