Это меня поставило в тупик, без атрибута setAttribute
. Я предполагаю, что смысл в том, что я не могу использовать setAttribute
для изменения значения. Как еще я могу изменить текущее значение?
У меня есть XML-файл с данными пациента, который мне нужно изменить / изменить. Я был в состоянии изменить другие текстовые узлы без проблем. Я могу getElementsByTagName()
, затем я должен использовать normalize()
, проверить, что объект не равен нулю, затем я могу изменить значение с помощью firstChild.nodeValue
, а затем использовать childNodes = [doc.createTextNode()
.
Значение, которое я пытаюсь изменить, немного отличается. Я обнаружил, что у элементов, которые я хотел изменить, сложился текстовый узел между ними: <element some data element>
Похоже, что элементы, которые мне нужно изменить, имеют атрибуты: <telecom use = "HP" value = "1 (800) ...." />
, но если я попробую setAttribute
, он выдаст ошибку. Внутри этого элемента телекоммуникации это может быть номер телефона или адрес электронной почты. У меня уже есть код для получения правильного кода, который я модифицирую, просто сводит меня с ума, почему я могу изменить значение.
И, хотя я еще не дошел до этого момента, могу поспорить, у меня будет еще одна проблема при записи этого модифицированного XML-файла в файл. (Просто размышляя вслух, пока ничего действительно не пошло, проблема сейчас в setAttribute
)
это фрагмент XML-файла:
author>
<time value="20190211160404-0700" />
<assignedAuthor>
<id root="2.16.840.9.9.9.99999" extension="99999999999" />
<addr use="HP">
<streetAddressLine>Urgent Care Clinic</streetAddressLine>
<streetAddressLine>123 Anywhere Lane</streetAddressLine>
<city>Denver</city>
<state>CO</state>
<postalCode>80000</postalCode>
</addr>
<telecom use="UP" value="tel:+1(800)999-4040" />
<assignedPerson>
<name>
<given>Test</given>
<family>Patient</family>
<suffix>FG</suffix>
</name>
</assignedPerson>
<representedOrganization>
<id root="2.16.840.1.999999.0.999.99999" />
<name>Urgent Care Clinic</name>
<telecom value="mailto:johnwayne@dukes.edu" />
</representedOrganization>
</assignedAuthor>
</
Код:
#This is how I have been modifying the attributes
for zipcode in doc.getElementsByTagName("postalCode"):
if zipcode.firstChild is not None:
zipcode.normalize()
zipcode.firstChild.nodeValue = "80224"
zipcode.childNodes = [doc.createTextNode("80224")]
else:
nodelist = doc.getElementsByTagName("postalCode").length
#These approaches fail
for telecom in doc.getElementsByTagName("telecom"):
phone = telecom.getAttribute("value")
if telecom.firstChild is not None:
telecom.normalize()
if phone[0:4] in ["mail"]:
#phone.setAttribute("value", "anon@anon.com")
#doc.getElementsByTagName("telecom").setAttribute("value", "anon@anon.com")
phone.firstChild,nodeValue = "anon@anon.com"
phone.childNodes = [doc.createTextNode("anon@anon.com")]
Я ожидаю, что значение телекоммуникации будет изменено. Если это не текстовый узел или атрибут, что это такое и как я могу изменить его значение?
Когда я использую phone.setAttribute("value", "anon@anon.com")
, я ожидаю, что значение телекоммуникации изменится с: <telecom value="mailto:johnwayne@dukes.edu" />
до <telecom value="mailto:anon@anon.com" />
Вместо этого я вижу ошибку:
AttributeError: объект str не имеет атрибута setAttribute при использовании phone.setAttribute()
и когда я пытаюсь
doc.getElementsByTagName("telecom").setAttribute("value", "anon@anon.com")
,
Я получаю ту же ошибку с небольшим поворотом,
объект nodeList не имеет атрибута setAttribute