XSLT模板Concat两个字符串

时间:2017-04-11 17:21:23

标签: xml xslt join active-directory attributes

我将首先说我是一名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>

1 个答案:

答案 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).