xpath z dwoma definicjami

0

Witam,

przy plikach xml nie wiem czemu ale czasami brakuje "en", przykład:

<Description Locale="en">Tekst</Description>
<Description Locale="">Tekst</Description>

i teraz chce zrobić xpath aby wyszukiwał mi z "en" oraz bez.
Tak wygląda mój xpath:

//*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale='en']

a taki jest drugi wariant:

//*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale='']

Pytanie, jak to teraz połączyć, np logiką or ?

1
( //*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale='en'] | //*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale=''])[1]
0
komuher napisał(a):
( //*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale='en'] | //*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale=''])[1]

Dzięki, to działa.
Ale myślałem że da się to zrobić nie przepisując raz jeszcze całego wyrażenia, tylko zrobić dwa warianty samej końcówki (ostatniego wyrażenia).

0
Caporeira napisał(a):
komuher napisał(a):
( //*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale='en'] | //*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale=''])[1]

Dzięki, to działa.
Ale myślałem że da się to zrobić nie przepisując raz jeszcze całego wyrażenia, tylko zrobić dwa warianty samej końcówki (ostatniego wyrażenia).

powinno sie dac sprobuj tak

//*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale='en' | Locale='' ]
0

W Xpath tester to działa, ale w kodzie wywala błąd:

tree.xpath("//*[local-name() = 'DisplayName'][@Locale='en'][text() = 'Motortyp']/../*[local-name() = 'Description'][@Locale='en'|Locale='']")
lxml.etree.XPathEvalError: Invalid type
0

XPath 2.0? Bo można spróbować [@Locale=('en', '')]

1 użytkowników online, w tym zalogowanych: 0, gości: 1