lxml

2016-04-14 27 views
1

kullanarak her öğede xmlns nasıl denetlenir Ürün öğeleri bir MapReduce işinde akış olarak kontrol etmek için lxml kullanıyorum. Her öğede yalnızca doğru xmlns değerinin bulunduğundan emin olmaya çalışıyorum. Örneğin, her Ürün elemanı bir xmlns "http://mynetwork.products.com/new" olarak ayarlanmış olmalıdır: Her Ürün elemanı işaretledikçelxml

<Product xmlns="http://mynetwork.products.com/new">

(birer birer akış), sadece benzediğini emin olmak için yukarıdaki. Aşağıdaki olası hataları kontrol etmek istiyorum:

  1. Yanlış xmlns URL:

<Product xmlns="http://mynetwork.products.com/old">

URL'yi Eksik
  • <Product xmlns="">

      1. eksik xmlns anahtar/değer çifti

      <Product>

    <Product xmlns="http://mynetwork.products.com/new" something="else">

    I değeri hesaplanması ve saklanması çalıştı Ürün elemanında

  • ilave atıfta
      Her bir öğe için (bir sözlük olan) Product.nsmap ve sonra doğrulamak için sözlük değerlerini okuyarak, ancak aşağıdaki durumlardan herhangi birini algılamama yardımcı olmaz. Bir yolu olmalı.

  • cevap

    2

    Her Product öğesinin nsmap ve attrib özelliklerini kontrol edebilirsiniz. nsmap yalnızca değeriyle None anahtarını ve attrib öğesinin öğesinde herhangi bir özelliğe izin vermeyeceğiniz için boş olmalıdır. (2.7 pyhon)

    Kısa örnek:

    >>> from lxml import etree 
    >>> raw = '''<root> 
    ... <Product xmlns="http://mynetwork.products.com/new"/> 
    ... <Product xmlns="http://mynetwork.products.com/new" something="else"/> 
    ... <Product xmlns="http://mynetwork.products.com/old" /> 
    ... <Product xmlns=""/> 
    ... <Product/> 
    ... </root>''' 
    ... 
    >>> root = etree.fromstring(raw) 
    >>> for p in root.findall('*'): 
    ...  isValid = len(p.nsmap) == 1 \ 
    ...   and p.nsmap[None] == 'http://mynetwork.products.com/new' \ 
    ...   and not p.attrib 
    ...  print isValid 
    ... 
    True 
    False 
    False 
    False 
    False 
    
    +0

    Ah, nsmap VE attrib hem kullanmak zorunda! Teşekkürler –

    İlgili konular