xslt test, если значение переменной содержится в наборе узлов - PullRequest
0 голосов
/ 26 апреля 2009

У меня есть следующие два файла:

<?xml version="1.0" encoding="utf-8" ?> 
<!-- D E F A U L T H O S P I T A L P O L I C Y -->

<xas DefaultPolicy="open" DefaultSubjectsFile="subjects.xss">
<rule id="R1" access="deny" object="record" subject="roles/*[name()!='Staff']"/> 
<rule id="R2" access="deny" object="diagnosis" subject="roles//Nurse"/>
<rule id="R3" access="grant" object="record[@id=$user]" subject="roles/member[@id=$user]"/> 
</xas>

и другой xml-файл с именем subjects.xss:

<?xml version="1.0" encoding="utf-8" ?> 
<subjects>

<users> 
<member id="dupont" password="4A-4E-E9-17-5D-CE-2C-DD-43-43-1D-F1-3F-5D-94-71">

<name>Pierre Dupont</name> 
</member>

 <member id="durand" password="3A-B6-1B-E8-C0-1F-CD-34-DF-C4-5E-BA-02-3C-04-61"> 
<name>Jacqueline Durand</name>

</member>

</users> 
<roles>

<Staff>

<Doctor> 
<member idref="dupont"/>

</Doctor> 
<Nurse>

<member idref="durand"/> 
</Nurse>

</Staff>

</roles> 
</subjects>

Я пишу лист xsl, в котором будет прочитано значение субъекта для каждого правила в policy.xas, и если текущий зарегистрированный пользователь (доступный как переменная «пользователь» в таблице стилей) содержится в этом значении субъекта (скажем, роли / Медсестра), то сделай что-нибудь.

Я не могу проверить, содержится ли зарегистрированный в данный момент пользователь ($ user, что эквивалентно "durand") в ролях // Медсестра в файле субъектов (который является другим XML-файлом). Надеюсь, это проясняет мой вопрос. Есть идеи? Заранее спасибо.

1 Ответ

1 голос
/ 26 апреля 2009

Я подозреваю, что ваша переменная $ user содержит узел-член, правильно? В этом случае тест будет: -

/roles/Nurse[member/idref=$user/@id]

Кстати, использование имен тегов для переноса таких данных, как «Медсестра» и «Доктор», не очень хорошая практика. Вы фактически говорите, что каждая новая роль - это новый тип. Лучше было бы: -

<roles>
 <role>
  <name>Nurse</name>
  <member idref="durand" />
 </role>
... 
</roles>

Ваш тест будет: -

/roles/role[name='Nurse' and member/idref=$user/@id]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...