помогите с выбором xpath - PullRequest
0 голосов
/ 18 марта 2010

У меня есть значение атрибута id для элемента.

я хочу выбрать только его потомков (не всех потомков).

я использовал

$childElements = $xml->xpath('//entity[@id=212323]');
print_r($childElements);

но это выберет ВСЕХ потомков и распечатает их. я просто хочу выбрать 1 поколение детей. как я могу это сделать?

<entity id=212323>
    <this>asd</this>
    <this>asd</this>
    <this>asd</this>
    <this>
        <notThis>asd</notThis>
        <notThis>asd</notThis>
        <notThis>asd</notThis>
    </this>
</entity>

(потому что иерархия очень длинная, поэтому слияние всех потомков замедлит процесс, и будет неуместно получать ненужные данные).

1 Ответ

4 голосов
/ 19 марта 2010

Вы можете использовать это:

//entity[@id=212323]/child::*[not(boolean(child::*))]

для выбора только тех узлов, которые не имеют дочерних элементов. Если это недостаточно хорошо, и вы ожидаете также такие случаи, как:

<entity id=212323>
    <this>asd</this>
    <this>asd</this>
    <this>asd</this>
    <this>
        text node 1
        <notThis>asd</notThis>
        <notThis>asd</notThis>
        <notThis>asd</notThis>
        text node 2
    </this>
</entity>

Тебе следует провести еще какое-то исследование. В этом примере text node 1 и text node 2 считаются дочерними элементами <this> элемента. Вам нужно выяснить (я не уверен, если это возможно), как отличить эти два узла от других (например, <notThis>asd</notThis>) в вашем выражении xPath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...