Member 13051048 Ответов: 1

Можете ли вы понять, почему мой XML-шаблон не печатает всю XML-структуру для последнего элемента в массиве?


Hi,

I am using pyton to code a small script which fills up an xml template which I define. The python code read an C file which has an array of strings seperated my commas. Something like this shown below.

    array myvector[] = {
    
    {"1" , "March", "1st", "2017"},
    {"2" , "March", "2nd", "2017"},
    {"3" , "March", "3rd", "2017"},
    .....
    {"1" , "April", "1st", "2017"},
    ....
    {"31" , "December", "31st", "2017"}
     {NULL , NULL, NULL, NULL}
    };


My python script replaces the strings like "March", "April", and ... till "December" in the {month} and number 1st, 2nd, 3rd, ... in the {day} part in the xml structure.

The funny thing is when I run my script, everything looks good except the last two days of December. The xml structure is only partly printed out. When I add an extra space or remove and extra sapce from **xmlTemplate** the printout of the xml structure for the last entries like the days in December get partly printed. I have no idea what is going wrong. Does it have to do with the formating of the xmlTemplate. Could someone advice me on what to do?

What I have tried:

I tried formating the spaces in the template but it does not help.

Jochen Arndt

Вы должны показать код, который генерирует выходной файл.

Одной из причин такого поведения является чтение файла, который все еще открыт (еще не закрыт).

Member 13051048

Чтобы иметь четкое представление о том, что я говорю, я опубликовал вывод, который я получаю в выходном файле ниже в качестве ответа, чтобы он позволял лучше формироваться. Не могли бы вы посоветовать мне, как ее решить?

Jochen Arndt

1. Не публикуйте такие сообщения как решение
Используйте зеленую ссылку "улучшить вопрос", чтобы отредактировать свой вопрос и удалить решение (оно, вероятно, будет сообщено как"не ответ").

2.это не очень помогает решить проблему, когда вы видите, что печатается, но не знаете, как это генерируется.

Member 13051048

Привет, я только что опубликовал свой полный код выше в отредактированном вопросе. Я думаю, что теперь это даст лучшую идею? Я был бы вам очень признателен, если бы вы помогли мне устранить эту ошибку. Большое спасибо!

Jochen Arndt

Где mytestfile открыт и закрыт?

Когда и где вы читаете содержимое файла?

Когда вы не закрываете файл с помощью mytestfile. close () и не читаете его из того же скрипта python или пока скрипт не выполнен, вы получите такое поведение, как уже отмечалось.

Member 13051048

Сэр, вы гений!!!!!!!!!!!!!!! Я забыл закрыть файл! Как я могла быть такой дурой! Проблемы решены сейчас!!!!!!!!!!!!!!!! YAYAYYYYYY!!! Да Здравствует Йохен!!!!!!!!!!!!!!!

добавил mytestfile. close () и он работает!

Member 13051048

У меня был только один последний вопрос. Я хочу иметь возможность добавить пространство имен в xml-шаблон. Я хочу, чтобы это было в начале и в конце файла. Не могли бы вы рассказать мне, как это сделать?

Я хочу, чтобы мой выходной файл выглядел примерно так:

&ЛТ;MyCalender префиксом xmlns:xsi в="http://www.w3.org/2001/XMLSchema-instance" атрибут xsi:schemaLocation="http:/...my.xsd" атрибутов xmlns="http:/..eyts"&ГТ;

........все xml-теги идут сюда.........



Не могли бы вы помочь мне, посоветовав, как это добавить?

Jochen Arndt

Просто запишите эту строку после открытия файла перед обработкой входного файла. Нет необходимости писать это также и в конце файла.

Member 13051048

я сделал это, но я не в состоянии правильно инкапсулировать строки, так как xmlns и xsi имеют свои собственные "". Не могли бы вы дать мне шаблон?

Jochen Arndt

Вы должны esacpe символы двойной кавычки с обратной косой чертой:

mytestfile.напишите ("< MyCalender xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http:/...my.xsd\" xmlns=\"http:/..eyts\" >")

или используйте одинарные кавычки (тогда одинарные кавычки внутри строки должны быть экранированы):

mytestfile.напишите ('<MyCalender xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/...my.xsd" xmlns="http:/..eyts">')

Member 13051048

Привет, я решил эту проблему. Спасибо за помощь.

Member 13051048

Я попытался открыть и закрыть файл, но это все еще не решает проблему. Самое смешное, что когда я добавляю пробел и переформатирую тег, в декабре исчезает еще несколько дней.

Код для записи в файл: myFilename. write ((xml. format(month=tag, day=name))) где тег и имя-это вычитаемые части массива, которые мне нужны и которые в конечном итоге являются "мартом", "апрелем",... и днями "1-го", "2-го",....

1 Ответов

Рейтинг:
7

Jochen Arndt

Смотрите комментарии.

Источник проблемы не закрывал выходной файл перед его последующим чтением:

for line in f:
    # ...
    mytestfile.write((xmlTemplate.format(month=monthone, day=dayone)))
    # ...
# Close files here
f.close()
mytestfile.close()