我将首先说我是一名xml新手。我正在使用传真服务器,该服务器使用xml文件从活动目录中提取属性以填充用户字段。除了一个值之外,我有一切都像我想要的那样工作。对于此值,我需要将两个属性组合成一个字符串,该字符串显示在传真服务器的用户配置文件中。我正在尝试将AD属性telephoneNumber和ipPhone组合成“888.888.8888 x254”格式,以显示在“PersonalVoiceNum”字段中。主线接着延伸。 “x”不在AD属性中,但我想在可能的情况下添加它。我试图使用concat和string-join来加入它们,但到目前为止都没有成功。我不是说他们不会工作。我只是没有正确格式化的经验。代码块中的第二位是我想要组合的两个属性。该部分以?xml version =“1.0”开头?是文件中的完整代码。任何帮助将不胜感激。
此处的最终目标是填充xml代码中的“PersonalVoiceNum”属性。 “telephoneNumber”和“ipPhone”是我正在提取的活动目录属性。我现在的第二部分代码显示“PersonalVoiceNum”可以使用telephoneNumber或ipPhone属性填充。我把它们放在那里,表明你可以插入到当前定义了ipPhone属性的xsl中。我想用两者的组合填充“PersonalVoiceNum”。所以它在xml中看起来如下,而不是只显示telephoneNumber或ipPhone号码。
解决方案
<xsl:template match="rf:attr[@name='ipPhone']">
<attr name="PersonalVoiceNum">
<value>
<xsl:text> 888.888.8888 x</xsl:text>
<xsl:apply-templates select="*"/>
</value>
</attr>
</xsl:template>
<attr name="PersonalVoiceNum">
<value>888.888.8888 x235</value>
</attr>
<xsl:template match="rf:attr[@name='telephoneNumber']">
<attr name="PersonalVoiceNum">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='ipPhone']">
<attr name="PersonalVoiceNum">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
整个XSLT
<?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']">
<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)-3, 4)"/>
<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>
<attr name="FromName">
<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='ipPhone']">
<attr name="PersonalVoiceNum">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='legacyExchangeDN']">
<attr name="RouteInfo">
<xsl:apply-templates select="*"/>
</attr>
<attr name="RouteType">
<value>11</value> <!-- Exchange = 11 -->
</attr>
<attr name="NotifyInfo">
<xsl:apply-templates select="*"/>
</attr>
<attr name="NotifyType">
<value>17</value> <!-- Exchange = 17 -->
</attr>
<attr name="RouteFormat">
<value>2</value> <!-- TIFF = 2 -->
</attr>
</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="NotifyInfo">
<xsl:apply-templates select="*"/>
</attr>
<attr name="NotifyType">
<!-- Exchange = 17 -->
<value>17</value>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='ObjectSid']">
<attr name="SyncGuid">
<xsl:apply-templates select="*"/>
</attr>
</xsl:template>
</xsl:stylesheet>
XML
<?xml version="1.0" encoding="utf-8"?>
<syncRequest disabledUsers="Ignore" disabledExchangeUsers="ignore"
xmlns="urn:rightfax-sync-schema">
<userAddRequest source="ActiveDirectory"
guid="010194de60143a4e878fbc12af89eae2" moveToGroup="">
<attr name="ToCompany">
<value>Company</value>
</attr>
<attr name="RouteCode">
<value>6600</value>
</attr>
<attr name="PersonalFaxNum">
<value>867.510.6500</value>
</attr>
<attr name="PersonalVoiceNum">
<value>235</value>
</attr>
<attr name="ToCityState">
<value>Chicago</value>
</attr>
<attr name="EmailAddress">
<value>Chris.Grif@company.com</value>
</attr>
<attr name="NotifyInfo">
<value>Chris.Grif@company.com</value>
</attr>
<attr name="NotifyType">
<value>17</value>
</attr>
<attr name="UserName">
<value>Chris Grif</value>
</attr>
<attr name="FromName">
<value>Chris Grif</value>
</attr>
<attr name="AssociatedNTAccountSID">
<value>S-1-5-21-2106057203-4278202381-757156151-2748</value>
</attr>
<attr name="RequiresNTAuth">
<value>True</value>
</attr>
<attr name="UserID">
<value>Chris.Grif</value>
</attr>
<attr name="telephoneNumber">
<value>888.888.8888</value>
</attr>
</userAddRequest>
答案 0 :(得分:0)
<xsl:template match="rf:attr[@name='telephoneNumber']">
<attr name="PersonalVoiceNum">
<value>
<xsl:value-of select="."/>
<xsl:text> x</xsl:text>
<xsl:value-of select="../rf:attr[@name='ipPhone']"/>
</value>
</attr>
</xsl:template>
<xsl:template match="rf:attr[@name='ipPhone']"/>
你可以这样做:
run :-
loop(0).
loop(X):-
format("~w",[X]),
sleep(1),
flush,
tty_clear,
X2 is X +1,
loop(X2).