Как получить xsi: noNamespaceSchemaLocation из XML с l xml? - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь проверить XML на основе xsi:noNamespaceSchemaLocation.

. Я исследовал этот вопрос, но, похоже, для него нет доступных решений.

Мой XML файл выглядит так:

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
  <orderperson>John Smith</orderperson>
  <shipto>
    <name>Ola Nordmann</name>
    <address>Langgt 23</address>
    <city>4000 Stavanger</city>
    <country>Norway</country>
  </shipto>
  <item>
    <title>Empire Burlesque</title>
    <note>Special Edition</note>
    <quantity>1</quantity>
    <price>10.90</price>
  </item>
  <item>
    <title>Hide your heart</title>
    <quantity>1</quantity>
    <price>9.90</price>
  </item>
</shiporder>

Я взял это из w3school

Это то, что я получаю, когда разбираю и получаю атрибут из root {'{http://www.w3.org/2001/XMLSchema-instance}noNamespaceSchemaLocation': 'shiporder.xsd'}

Как я могу сделать это с lxml в Python? Я смотрел другие парсеры, но пока не знал, как это сделать.

1 Ответ

0 голосов
/ 02 марта 2020

Спасибо @mzjn за указание на нотацию Кларка.

Решение, которое я придумал:

from lxml import etree

...

it = etree.fromstring(xml)
# We need to go through all keys since they can be in
# Clark notation and have URL with brackets as a prefix
for attr in it.attrib:
    if 'noNamespaceSchemaLocation' in attr:
        xsd = it.attrib.get(attr)
        break

...

# Do validations based on XSD URL value
...