好的,我对XSL一无所知。我想遍历用户成员并做一些事情,如果没有匹配,那么做其他事情。我有以下哪种工作适用于我们的传真系统。当AD组中的用户获得系统中的委派权限时。这是版本1.0。
我希望我正确添加了代码
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rf="urn:rightfax-sync-schema"
xmlns="urn:rightfax-sync-schema"
exclude-result-prefixes="rf"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<!-- Copy all nodes and attributes. -->
<xsl:template match="/ | @* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- "userID" is a required attribute -->
<xsl:template match="rf:attr[@name='sAMAccountName']">
<attr name="UserID">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='objectSid']">
<attr name="AssociatedNTAccountSID">
<xsl:apply-templates select="*"/>
</attr>
<attr name="RequiresNTAuth">
<value>True</value>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='company']">
<attr name="ToCompany">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='facsimileTelephoneNumber']">
<!-- Commented out because AD users have the same fax number assigned to multiple users <attr name="RouteCode">
<value>
Get the last 4 digits of fax number, ignoring various special characters that might
be found in phone numbers. If result is Not a Number then use default route code instead.
<xsl:variable name="cleanNumber" select="translate(node(), ' .-,()', '')"/>
<xsl:variable name="routecode" select="substring($cleanNumber, string-length($cleanNumber)-6, 7)"/>
<xsl:choose>
<xsl:when test="string(number($routecode))='NaN'">100</xsl:when>
<xsl:otherwise><xsl:value-of select="$routecode"/></xsl:otherwise>
</xsl:choose>
</value>
</attr> -->
<attr name="PersonalFaxNum">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='l']">
<attr name="ToCityState">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='name']">
<attr name="UserName">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='otherFacsimileTelephoneNumber']">
<attr name="GeneralFaxNum">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='otherTelephone']">
<attr name="GeneralVoiceNum">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='telephoneNumber']">
<attr name="PersonalVoiceNum">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='memberOf']">
<attr name="GroupID">
<xsl:for-each select='*'>
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:variable name="tmpVar" select="substring-after(node(), '=')"/>
<xsl:variable name="groupName" select="translate(substring-before(substring-after(node(), '='), ','), $uppercase, $smallcase)"/>
<xsl:choose>
<xsl:when test="string($groupName)='OT_group1_delegates'"><value>9</value></xsl:when>
<xsl:when test="string($groupName)='OT_group2_delegates'"><value>11</value></xsl:when>
<xsl:otherwise><value>1</value></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='legacyExchangeDN']">
</xsl:template>
<xsl:template match="rf:attr[@name='msExchVoiceMailboxID']">
<attr name="BigVoiceMailSubscriberID">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='mail']">
<attr name="EmailAddress">
<xsl:apply-templates select="*"/>
</attr>
<attr name="RouteInfo">
<xsl:apply-templates select="*"/>
</attr>
<!-- Commented out to force routing from default user<attr name="RouteType">
<value>11</value> Exchange = 11
</attr> -->
<attr name="NotifyInfo">
<xsl:apply-templates select="*"/>
</attr>
<attr name="NotifyType">
<!-- Exchange = 17, SMTP = 18 -->
<value>18</value>
</attr>
<attr name="RouteFormat">
<value>2</value> <!-- TIFF = 2 -->
</attr>
</xsl:template>
</xsl:stylesheet>
所以,如果我注意到其他行,那么它运行正常。如果用户位于其中一个OT组中,则他们将获得委派权限。但是,如果我取消标记其他行,它将添加它们,然后由于&lt; 1&gt;而删除它们。有没有办法说如果用户不在其中一个AD组中,那么不这样做呢?有点像一次匹配一次?
理想情况下,它也只会查找以OT_开头的AD组,因为用户可能有几十个组。
希望这是有道理的。