xslt测试节点集中是否包含变量值

时间:2009-04-26 14:35:32

标签: xslt xpath

我有以下两个文件:

<?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>

和另一个名为subjects.xss的xml文件是:

<?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”访问)是否包含在该主题值中(比如roles / /护士),然后做点什么。

我无法测试当前登录的用户($ user等于说“durand”)是否包含在角色中// Nurse在subject文件中(这是一个不同的xml文件)。希望澄清我的问题。有任何想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我怀疑你的$ 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]