Как вывести конкретные значения с XPathQuery? - PullRequest
1 голос
/ 11 февраля 2011

Когда я делаю

account[@id=15]

, я получаю

<?xml version="1.0" encoding="utf-8"?>
<root>
  <account id="15" first_name="Sandra" last_name="Schlichting">
    <private_address address_id="19" />
    <profile_employee fk_id="15">
      <date_created>2011-1-2T1:1:00</date_created>
      <address building="3" room="2" floor="1" />
    </profile_employee>
    <profile_student fk_id="15">
      <address address_id="19" />
    </profile_student>
    <profile_student fk_id="15">
      <address address_id="45" />
    </profile_student>
  </account>
</root>

, но я хотел бы просто вывести значения

  • first_name
  • фамилия
  • здание
  • комната

Может кто-нибудь выяснить, как это сделать?

Обновление:

Эти команды работают

account[@id=15]/profile_employee
account[@id=15]/profile_employee/address

, но выводят целые элементы, а не только атрибуты комнаты и здания.

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Хотя ответ @ Флэка правильный, желаемый результат может быть получен с помощью одного выражения XPath:

concat('&#xA;', /*/account[@id=15]/@first_name,
       ' ', /*/account[@id=15]/@last_name,
       ' : ', /*/account[@id=15]/profile_employee/address/@building,
       '/', /*/account[@id=15]/profile_employee/address/@room
       )

Когда это выражение XPath оценивается в предоставленном XML-документе :

<root>
    <account id="15" first_name="Sandra" last_name="Schlichting">
        <private_address address_id="19" />
        <profile_employee fk_id="15">
            <date_created>2011-1-2T1:1:00</date_created>
            <address building="3" room="2" floor="1" />
        </profile_employee>
        <profile_student fk_id="15">
            <address address_id="19" />
        </profile_student>
        <profile_student fk_id="15">
            <address address_id="45" />
        </profile_student>
    </account>
</root>

желаемый, правильный результат получается:

Sandra Schlichting : 3/2
1 голос
/ 11 февраля 2011

Вам необходимо:

/root/account[@id=15]/@first_name
/root/account[@id=15]/@last_name
/root/account[@id=15]/profile_employee/address/@building
/root/account[@id=15]/profile_employee/address/@room

Если при тестировании в XSLT с вашим образцом, результат будет (разрывы строк для ясности):

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