سؤال

وأنا أحاول أن تحديد مساحة اسم باستخدام <م> lxml على غرار هذا المثال (مأخوذة من <لأ href = "http://www.maconstateit.net/tutorials/XML/XML03/xml03- 01.htm "يختلط =" نوفولو noreferrer "> هنا ):

<TreeInventory xsi:noNamespaceSchemaLocation="Trees.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</TreeInventory>

وأنا لست متأكدا من كيفية إضافة المثال مخطط لاستخدام وأيضا موقع المخطط. و الوثائق حصلت لي بدأت، عن طريق القيام بشيء مثل:

>>> NS = 'http://www.w3.org/2001/XMLSchema-instance'
>>> TREE = '{%s}' % NS
>>> NSMAP = {None: NS}
>>> tree = etree.Element(TREE + 'TreeInventory', nsmap=NSMAP)
>>> etree.tostring(tree, pretty_print=True)
'<TreeInventory xmlns="http://www.w3.org/2001/XMLSchema-instance"/>\n'

وأنا لست متأكدا من كيفية تحديد ذلك مثيل رغم ذلك، وبعد ذلك أيضا تحديد موقع. يبدو مثل هذا يمكن أن يتم مع nsmap الكلمة-الارجنتين في etree.Element، لكنني لا أرى كيف.

هل كانت مفيدة؟

المحلول

في بعض المزيد من الخطوات، لوضوح:

>>> NS = 'http://www.w3.org/2001/XMLSchema-instance'

وبقدر ما أستطيع أن أرى، هو noNameSpaceSchemaLocation السمة التي تريد namespaced، وليس عنصر TreeInventory. لذلك:

>>> location_attribute = '{%s}noNameSpaceSchemaLocation' % NS
>>> elem = etree.Element('TreeInventory', attrib={location_attribute: 'Trees.xsd'})
>>> etree.tostring(elem, pretty_print=True)
'<TreeInventory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Trees.xsd"/>\n'

وهذا يشبه ما تريد ... هل يمكن بالطبع أيضا إنشاء العنصر الأول، دون الصفات، ومن ثم تعيين السمة، مثل هذا:

>>> elem = etree.Element('TreeInventory')
>>> elem.set(location_attribute, 'Trees.xsd')

وأما بالنسبة للمعلمة nsmap: أعتقد أنه يستخدم فقط لتحديد أي البادئات لاستخدامها في التسلسل. في هذه الحالة، ليست هناك حاجة، لأنه يعرف lxml البادئة تستخدم عادة لمساحة الاسم في السؤال هو "XSI". لو لم يكن بعض مساحة معروفة، هل من المحتمل ان نرى البادئات مثل "ns0"، "NS1" الخ ...، إلا إذا قمت بتحديده التي بادئة كنت تفضل. (تذكر: ليس من المفترض بادئة ليهم)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top