XPath для специального тега под родительским - PullRequest
0 голосов
/ 15 мая 2018

Во второй половине дня.Я пытаюсь проанализировать метаданные из и XSD файла.Я хотел бы проанализировать метаданные из всех тегов элемента, для каждого из родительских тегов.Например, для тега Speed_Detail ниже я хотел бы собрать все данные, связанные с дочерними атрибутами element.Предположим, родители находятся на одном уровне.

`` `

<xsd:element name="SpeedDetails">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Header" type="global:HeaderInfoType"/>
                <xsd:element name="SpeedUnitOfMeasure" type="xsd:string" minOccurs="0"/>
                <xsd:element name="TileId" type="xsd:long" minOccurs="0"/>
                <xsd:sequence minOccurs="0" maxOccurs="unbounded">
                    <xsd:element name="Route" type="speed:RouteType"></xsd:element>
                </xsd:sequence>
                <xsd:sequence minOccurs="0" maxOccurs="unbounded">
                    <xsd:element name="Segment" type="speed:SegmentType"></xsd:element>
                </xsd:sequence>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

` ``

Я знаю, что могу получить доступ ко всем элементам через "//{ns}element".format(ns), но это дает все элементы во всем дереве.

Я пытался собрать элементы с чем-то вроде ".[@name='{}']*/{}element".format(name,ns).Я не могу заставить xpath работать, потому что я продолжаю получать invalid predicate error.Может кто-нибудь объяснить, почему это так?А как бы вы написали правильный xpath?Пожалуйста, добавьте ваш прецесс мысли.

1 Ответ

0 голосов
/ 15 мая 2018

Что за {} вы используете в своих xpaths?это не является действительным xpath.Чтобы добавить к этому пространства имен (часть xsd:) обычно игнорируются в синтаксических анализаторах xpath.

Так что в python с пакетом lxml я получил совершенно хорошие результаты:

>>> tree.xpath('//sequence/element/@name')
['Header', 'SpeedUnitOfMeasure', 'TileId', 'Route', 'Segment']
...