Я все еще изучаю Python, поэтому, пожалуйста, потерпите меня, если мой подход, представленный ниже, покажется нудистским.Я пишу программу, которая будет читать в XML-файл и добавлять недостающие узлы.Я использую ElementTree Python, чтобы просмотреть XML и внести изменения.
К сожалению, ElementTree не форматирует добавленное в xml.Это просто оставляет все в одной строке.Чтобы исправить это, я импортировал xmlformatter.xmlformatter прекрасно работает, но он меняет мой (точка с запятой амперсанда) на фактические кавычки внутри xml, потому что рассматриваемый xml-файл имеет символ «&» для представления кавычек.
Вот пример кода xml:
<override action="replaceElement" path="pdf-
list/pdf[@name="HfsSdbWks" ]">
<element name="pdf">
<attribute name="size" value="186"></attribute>
<attribute name="name" value="HfsSdbWks"></attribute>
<attribute name="path"
value="/clientFolder/downloads/HFS_SDB_Wks.pdf">
</attribute>
<attribute name="devPath"
value="/clientFolder/downloads/HFS_SDB_Wks.pdf"></attribute>
</element>
</override>
Так что моя проблема на самом деле: каков наилучший способ учесть это и?
Мой личный подходчтобы исправить это, нужно было сначала прочитать весь файл в строку.Затем замените внутри этой строки все вхождения "
на 1234abcd
или в основном любой вид уникальной строки символов, которая сохраняет XML-файл нетронутым, который я затем смогу вернуть после форматирования.
def createPdfOvr(self, ovrCopy): #these are methods inside a class
if self.xml_string != '':
with open(self.OVR_COPY, 'w') as f:
f.write(self.xml_string)
def formatXML(self, xml_string):
formatted_xml =
xml.Formatter().format_string(self.xml_string).decode("utf-8")
self.xml_string = formatted_xml.replace('abc1234', '"')
В настоящее время у меня ожидаемые результаты.Это обновленный XML-файл, который имеет все новые узлы / атрибуты и отформатирован для чтения.Вот код:
overrides parent="runtime/view/PDF.xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="FndtOverridesSchema.xsd">
<override action="replaceElement" path="pdf-
list/pdf[@name="HfsSdbWks" ]">
<element name="pdf">
<attribute name="size" value="186"></attribute>
<attribute name="name" value="HfsSdbWks"></attribute>
<attribute name="path"
value="/01040_ybr_ybrfndt/downloads/HFS_SDB_Wks.pdf"></attribute>
<attribute name="devPath"
value="/01040_ybr_ybrfndt/downloads/HFS_SDB_Wks.pdf"></attribute>
</element>
</override>
<----This is the new node that was added---->
<override action="replaceElement" path="pdf-
list/pdf[@name="Hippa" ]">
<element name="pdf">
<attribute name="size" value="129"></attribute>
<attribute name="name" value="Hippa"></attribute>
<attribute name="path" value="/01040_ybr_ybrfndt/downloads/Hippa.pdf">
</attribute>
<attribute name="devPath"
value="/01040_ybr_ybrfndt/downloads/Hippa.pdf"></attribute>
</element>
</override>