2016-10-06 2 views
-1

Я использую Python V 3.5.1 на фреймворках Windows, чтобы изменить текст внутри, модификация отлично работает, но после сохранения дерева все пустые теги будут уничтожены в следующем примере :Python XML-модификация от ElementTree разрушает структуру XML

<HOSTNAME></HOSTNAME> Is being changed to <HOSTNAME /> 

ребенка с текстом между тегами выглядит хорошо:

<HOSTNAME>tnas2</HOSTNAME> is being changed to 
<HOSTNAME>tnas2</HOSTNAME> which is the same as the source. 

файл исходного XML является:

<ROOT> 

    <DeletedName> 

     <VERIFY_DEST_SIZE>Y</VERIFY_DEST_SIZE> 

     <VERIFY_BYTES>Y</VERIFY_BYTES> 

     <TIMESTAMP>XXXXXXXXXDeletedXXXXXXXXXX</TIMESTAMP> 

     <EM_USERS>XXXXXXXXXDeletedXXXXXXXXXX</EM_USERS> 

     <EM_GROUPS></EM_GROUPS> 

     <LOCAL> 

      <HOSTNAME></HOSTNAME> 

      <PORT></PORT> 

      <USERNAME>XXXXXXXXXDeletedXXXXXXXXXX</USERNAME> 

      <PASSWORD>XXXXXXXXXDeletedXXXXXXXXXX</PASSWORD> 

      <HOME_DIR></HOME_DIR> 

      <OS_TYPE>Windows</OS_TYPE> 

     </LOCAL> 

     <REMOTE> 

      <HOSTNAME>DeletedHostName</HOSTNAME> 

      <PORT>22</PORT> 

      <USERNAME>XXXXXXXXXDeletedXXXXXXXXXX</USERNAME> 

      <PASSWORD>XXXXXXXXXDeletedXXXXXXXXXX</PASSWORD> 

      <HOME_DIR>XXXXXXXXXDeletedXXXXXXXXXX</HOME_DIR> 

      <OS_TYPE>Unix</OS_TYPE> 

      <CHAR_SET>UTF-8</CHAR_SET> 

      <SFTP>Y</SFTP> 

      <ENCRYPTION>Blowfish</ENCRYPTION> 

      <COMPRESSION>N</COMPRESSION> 

     </REMOTE> 

    </DeletedName> 

</ROOT> 

код:

import os 
import xml.etree.ElementTree as ET 
from shutil import copyfile 
import datetime 

def AddAuthUserToAccountsFile(AccountsFile,RemoteMachine,UserToAdd): 
    today = datetime.date.today() 
    today = str(today) 
    print(today) 
    BackUpAccountsFile = AccountsFile + "-" + today 
    try: 
     tree = ET.parse(AccountsFile) 
    except: 
     pass 
    try: 
     copyfile(AccountsFile,BackUpAccountsFile) 
    except: 
     pass 
    root = tree.getroot() 
    UsersTags = tree.findall('.//EM_USERS') 
    for UsersList in UsersTags: 
     Users = UsersList.text 
     Users = UsersList.text = Users.replace("||","|") 
     if UserToAdd not in Users: 
      print("The Users were : ",Users, "--->> Adding ",UserToAdd) 
      UsersList.text = Users + UserToAdd +"|" 
    tree.write(AccountsFile) 

Цените за любую помощь, чтобы пройти этот странный сценарий.

Спасибо, Miki

+0

'' точно так же, как '' e4c5

+0

да, но мое приложение не может читать, он выглядит внутри тегов, так что если там нет открытых тегов и закрывающий тег он не может прочитать его. –

+0

Ну, тогда вы сделали большую ошибку при написании приложения. – e4c5

ответ

0

ОК, я нашел решение - просто добавить метод = "HTML" в tree.write линии он держит его по мере необходимости.

tree.write(AccountsFile,method = 'html') 

Спасибо.