473,574 Members | 2,573 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

How to pull a specific name within a node when using an XSL Stylesheet

17 New Member
I’ve very new to XML and making XSL stylesheets. Currently I have a bunch of Exchange Servers listed throughout my XML document. All the Exchange Servers are located within the node:
Expand|Select|Wrap|Line Numbers
  1. DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster
within the XML document.

In my XSL stylesheet I’ve been calling out the exchange server individually by name. (example):

Expand|Select|Wrap|Line Numbers
  1.  for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[@Fqdn='exch-dc-08.contoso.microsoft.com'] | DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[@Fqdn='tk5ucdfpp01.contoso.microsoft.com']”>. 
As you can see if one has multiple servers the stylesheet will get rather congested calling out each server. I want to know if there is a way that I can display all the Exchange servers by using: contoso.microso f.com instead of inputing each server names entire FQDN individually. I want one rule for all Exchange servers so that I don’t have to make a a rule for each within the atribute for-each select .

Below is my XML document and my XSL Stylesheet.

XML Document (Had to modify this a little because the XML file is huge):
Expand|Select|Wrap|Line Numbers
  1. <Key ScopeClass="Global">
  2.                     <SchemaId Namespace="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008" ElementName="Topology" />
  3.                     <AuthorityId Class="Host" InstanceId="00000000-0000-0000-0000-000000000000" />
  4.                 </Key>
  5.                 <Dictionary Count="1">
  6.                     <Item>
  7.                         <Key />
  8.                         <Value Signature="d68c994c-9b4c-4bac-8659-7709d1639352">
  9.                             <Topology xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008" schemaLocation="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008 ..\..\..\..\dev\server\Squid\Schemas\Deploy\Topology.2008.xsd">
  10.                                 <InternalDomains AllowAllDomains="false" DefaultDomain="microsoft.com">
  11.                                     <InternalDomain Name="microsoft.com" Authoritative="false" />
  12.                                 </InternalDomains>
  13.                                 <Sites>
  14.                                     <CentralSite SiteId="tk5">
  15.                                         <Name>Exchange</Name>
  16.                                         <Location CountryCode="US" City="Quincy" State="WA" />
  17.                                     </CentralSite>
  18.                                     <CentralSite SiteId="tukwila">
  19.                                         <Name>Tukwila</Name>
  20.                                         <Location CountryCode="US" City="Tukwila" State="WA" />
  21.                                         <SiteConfiguration Type="Microsoft.Rtc.Management.Deploy.Internal.SiteConfigurations.OCSSiteConfiguration">
  22.                                             <OCSSiteConfiguration xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.SiteConfigurations.2008">
  23.                                                 <FederationRoute>
  24.                                                     <ServiceId xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008" SiteId="BackCompatSite" RoleName="Registrar" Instance="7" />
  25.                                                 </FederationRoute>
  26.                                             </OCSSiteConfiguration>
  27.                                         </SiteConfiguration>
  28.                                     </CentralSite>
  29.                                     <CentralSite SiteId="BackCompatSite">
  30.                                         <Name>BackCompatSite</Name>
  31.                                     </CentralSite>
  32.                                     <RemoteSite SiteId="bo_tc" CentralSiteId="tk5">
  33.                                         <Name>Tacoma Branch</Name>
  34.                                         <Location CountryCode="US" City="Tacoma" State="WA" />
  35.                                     </RemoteSite>
  36.                                 </Sites>
  37.                                 <Clusters>
  38.                                     <Cluster Fqdn="exch-dc-08.contoso.microsoft.com" RequiresReplication="false" RequiresSetup="false">
  39.                                         <ClusterId SiteId="tk5" Number="1" />
  40.                                         <Machine OrdinalInCluster="1" Fqdn="exch-dc-08.contoso.microsoft.com">
  41.                                             <NetInterface InterfaceSide="Primary" InterfaceNumber="1" IPAddress="1.1.1.1" />
  42.                                         </Machine>
  43.                                     </Cluster>
  44.                                     <Cluster Fqdn="tk5ucdfpp01.contoso.microsoft.com" RequiresReplication="false" RequiresSetup="false">
  45.                                         <ClusterId SiteId="tk5" Number="2" />
  46.                                         <Machine OrdinalInCluster="1" Fqdn="tk5ucdfpp01.contoso.microsoft.com">
  47.                                             <NetInterface InterfaceSide="External" InterfaceNumber="1" IPAddress="2.2.2.2" />
  48.                                             <NetInterface InterfaceSide="Primary" InterfaceNumber="1" IPAddress="2.2.2.2" />
  49.                                         </Machine>
  50.                                     </Cluster>
  51.                                     <Cluster Fqdn="b43ucdfms01.contoso.microsoft.com" RequiresReplication="false" RequiresSetup="false">
  52.                                         <ClusterId SiteId="tk5" Number="3" />
  53.                                         <Machine OrdinalInCluster="1" Fqdn="b43ucdfms01.contoso.microsoft.com">
  54.                                             <NetInterface InterfaceSide="Primary" InterfaceNumber="1" IPAddress="3.3.3.3" />
  55.                                             <NetInterface InterfaceSide="Pstn" InterfaceNumber="1" IPAddress="3.3.3.3" />
  56.                                         </Machine>
  57.                                                                         </Cluster>
  58. + <SqlInstances>
  59. + <Services>
  60. </Topology>
  61. </Value>
  62. </Item>
  63. </Dictionary>
  64. </AnchoredXml>
  65. </Data>
  66. </DocItem>
  67. + <DocItem Name>
  68. </DocItemSet>
  69.  
XSLT Stylesheet
Expand|Select|Wrap|Line Numbers
  1. <?xml version='1.0'?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  3. <xsl:template match="/">
  4.   <html>
  5.    <body>
  6.      <body bgcolor="Silver">
  7.    </body>
  8.      <h2>Exchange Server Information</h2>
  9.      <table border="3"> 
  10.       <tr bgcolor="yellow">
  11.           <th>Exchange Servers</th>
  12.         <th>Replication Required</th>
  13.         <th>Setup Required</th>
  14.         <th>Network Interface</th>
  15.         <th>IP Address</th>
  16.       </tr>    
  17.       <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[@Fqdn='exch-dc-08.contoso.microsoft.com']|
  18.            DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[@Fqdn='tk5ucdfpp01.contoso.microsoft.com']|
  19.            DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[@Fqdn='b43ucdfms01.contoso.microsoft.com']|
  20.  
  21.            DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster/Machine/NetInterface[@IPAddress='1.1.1.1']|
  22.            DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster/Machine/NetInterface[@IPAddress='2.2.2.2']|
  23.            DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster/Machine/NetInterface[@IPAddress='3.3.3.3']">
  24.       <tr>
  25.  
  26.            <td><xsl:value-of select="@Fqdn"/></td>
  27.            <td><xsl:value-of select="@RequiresReplication"/></td>
  28.            <td><xsl:value-of select="@RequiresSetup"/></td>
  29.            <td><xsl:value-of select="@InterfaceSide"/></td>
  30.            <td><xsl:value-of select="@IPAddress"/></td>
  31.       </tr>
  32.       </xsl:for-each>
  33.     </table>
  34.    </body>
  35.   </html>
  36. </xsl:template>
  37. </xsl:stylesheet>
  38.  
Attached is a screenshoot of my XML output table.
Attached Images
File Type: jpg Example.jpg (18.3 KB, 305 views)
Apr 5 '10 #1
16 2901
jkmyoung
2,057 Recognized Expert Top Contributor
Do either of these work?
Expand|Select|Wrap|Line Numbers
  1. <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster"> OR
  2.  
  3. <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[contains(.,'contoso.microsoft.com')]">
  4.  
Apr 5 '10 #2
GabeGGG
17 New Member
The first option you gave me pulled all of the servers even the ones with different FQDN's . I get the error below for the 2nd option you gave me:

Expand|Select|Wrap|Line Numbers
  1. [Unknown method. DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[-->contains(.<--,'exch...

Tried the below XSLT Stylesheet
Expand|Select|Wrap|Line Numbers
  1. <?xml version='1.0'?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  3. <xsl:template match="/">
  4.   <html>
  5.    <body>
  6.      <body bgcolor="Silver">
  7.    </body>
  8.      <h2>Exchange Server Information</h2>
  9.      <table border="3"> 
  10.       <tr bgcolor="yellow">
  11.           <th>Exchange Servers</th>
  12.         <th>Replication Required</th>
  13.         <th>Setup Required</th>
  14.         <th>Network Interface</th>
  15.         <th>IP Address</th>
  16.       </tr>    
  17.       <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[contains(.,'contoso.microsoft.com')]|
  18.                             DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster/Machine/NetInterface[@IPAddress='1.1.1.1']| 
  19.                             DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster/Machine/NetInterface[@IPAddress='2.2.2.2']| 
  20.                             DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster/Machine/NetInterface[@IPAddress='3.3.3.3']"> 
  21.       <tr>
  22.  
  23.            <td><xsl:value-of select="@Fqdn"/></td>
  24.            <td><xsl:value-of select="@RequiresReplication"/></td>
  25.            <td><xsl:value-of select="@RequiresSetup"/></td>
  26.            <td><xsl:value-of select="@InterfaceSide"/></td>
  27.            <td><xsl:value-of select="@IPAddress"/></td>
  28.       </tr>
  29.       </xsl:for-each>
  30.     </table>
  31.    </body>
  32.   </html>
  33. </xsl:template>
  34. </xsl:stylesheet>
  35.  
Apr 5 '10 #3
jkmyoung
2,057 Recognized Expert Top Contributor
Are you using MSXML 3 or earlier? How are you running the transformation?
You may need to set something like:
oXMLDoc.setProp erty("Selection Language", "XPath");

Is substring-after supported?, eg:
Expand|Select|Wrap|Line Numbers
  1. <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[substring-after(@Fqdn,'.') = 'contoso.microsoft.com']">
  2.  
Apr 5 '10 #4
GabeGGG
17 New Member
I'm not 100% sure if I'm running MSXML 3 or earlier. When I open the XML document it says "<?xml version="1.0" encoding="utf-8" ?> " at the top.

I'm taking an XML document that someone gave me and making an XSL stylesheet so that the XML document can be visable in a template format. I'll open the XML doc in notepad and point it to my XSL document and save it. Then I'll customize my XSL document. When I open the XML document it will display the data.

Below is the info I added to my last XSL document that you sent me last.
Expand|Select|Wrap|Line Numbers
  1. <?xml version='1.0'?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  3. <xsl:template match="/">
  4.   <html>
  5.    <body>
  6.      <body bgcolor="Silver">
  7.    </body>
  8.      <h2>Exchange Server Information</h2>
  9.      <table border="3"> 
  10.       <tr bgcolor="yellow">
  11.           <th>Exchange Servers</th>
  12.         <th>Replication Required</th>
  13.         <th>Setup Required</th>
  14.         <th>Network Interface</th>
  15.         <th>IP Address</th>
  16.       </tr>    
  17.       <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[substring-after(@Fqdn,'.')='contoso.microsoft.com']|
  18.  
  19.                             DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster/Machine/NetInterface[@IPAddress='157.54.98.16']| 
  20.                             DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster/Machine/NetInterface[@IPAddress='157.54.61.141']| 
  21.                             DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster/Machine/NetInterface[@IPAddress='10.31.127.204']"> 
  22.       <tr>
  23.  
  24.            <td><xsl:value-of select="@Fqdn"/></td>
  25.            <td><xsl:value-of select="@RequiresReplication"/></td>
  26.            <td><xsl:value-of select="@RequiresSetup"/></td>
  27.            <td><xsl:value-of select="@InterfaceSide"/></td>
  28.            <td><xsl:value-of select="@IPAddress"/></td>
  29.       </tr>
  30.       </xsl:for-each>
  31.     </table>
  32.    </body>
  33.   </html>
  34. </xsl:template>
  35. </xsl:stylesheet>
  36.  
Apr 5 '10 #5
Niheel
2,456 Recognized Expert Moderator Top Contributor
use code tags to display all your code:

[code] . . . . [/code]

Apr 5 '10 #6
GabeGGG
17 New Member
kub365 I'm not sure what you mean by code tags? I'm very new to this site and XML and XSL. Sorry for the troubles.
Apr 5 '10 #7
jkmyoung
2,057 Recognized Expert Top Contributor
If you change your stylesheet element to:
<xsl:styleshe et version="1.0" xmlns:xsl="http ://www.w3.org/1999/XSL/Transform">
does it work?

code tags [code] [/code]
Represented by the # in the quick reply box, next to quote
Apr 6 '10 #8
GabeGGG
17 New Member
jkmyoung

I get the below when I use the code below: Also see first picture for outcome.
Expand|Select|Wrap|Line Numbers
  1. <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[substring-after(@Fqdn,'.') = 'contoso.microsoft.com']">
Stylesheet

Expand|Select|Wrap|Line Numbers
  1. <<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  2. <xsl:template match="/">
  3.   <html>
  4.    <body>
  5.      <body bgcolor="Silver">
  6.    </body>
  7.      <h2>Exchange Server Information</h2>
  8.      <table border="3"> 
  9.       <tr bgcolor="yellow">
  10.           <th>Exchange Servers</th>
  11.         <th>Replication Required</th>
  12.         <th>Setup Required</th>
  13.         <th>Network Interface</th>
  14.         <th>IP Address</th>
  15.       </tr>    
  16.       <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[substring-after(@Fqdn,'.') = 'contoso.microsoft.com']"> 
  17.       <tr>
  18.  
  19.            <td><xsl:value-of select="@Fqdn"/></td>
  20.            <td><xsl:value-of select="@RequiresReplication"/></td>
  21.            <td><xsl:value-of select="@RequiresSetup"/></td>
  22.            <td><xsl:value-of select="@InterfaceSide"/></td>
  23.            <td><xsl:value-of select="@IPAddress"/></td>
  24.       </tr>
  25.       </xsl:for-each>
  26.     </table>
  27.    </body>
  28.   </html>
  29. </xsl:template>
  30. </xsl:stylesheet>
  31.  

When I use code:
Expand|Select|Wrap|Line Numbers
  1.  <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[contains(.,'contoso.microsoft.com')]"> 
I get the same output as my other screenshoot.

Stylesheet used:

Expand|Select|Wrap|Line Numbers
  1. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  2. <xsl:template match="/">
  3.   <html>
  4.    <body>
  5.      <body bgcolor="Silver">
  6.    </body>
  7.      <h2>Exchange Server Information</h2>
  8.      <table border="3"> 
  9.       <tr bgcolor="yellow">
  10.           <th>Exchange Servers</th>
  11.         <th>Replication Required</th>
  12.         <th>Setup Required</th>
  13.         <th>Network Interface</th>
  14.         <th>IP Address</th>
  15.       </tr>    
  16.       <xsl:for-each select="DocItemSet/DocItem/Data/AnchoredXml/Dictionary/Item/Value/Topology/Clusters/Cluster[contains(.,'contoso.microsoft.com')]"> 
  17.  
  18.  
  19.       <tr>
  20.  
  21.            <td><xsl:value-of select="@Fqdn"/></td>
  22.            <td><xsl:value-of select="@RequiresReplication"/></td>
  23.            <td><xsl:value-of select="@RequiresSetup"/></td>
  24.            <td><xsl:value-of select="@InterfaceSide"/></td>
  25.            <td><xsl:value-of select="@IPAddress"/></td>
  26.       </tr>
  27.       </xsl:for-each>
  28.     </table>
  29.    </body>
  30.   </html>
  31. </xsl:template>
  32. </xsl:stylesheet>
  33.  
Attached Images
File Type: jpg Example3.jpg (7.9 KB, 182 views)
Apr 6 '10 #9
GabeGGG
17 New Member
Do I need to change my XML sheet as well? It shows that its using.

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="DocItemSe tV10.xsl"?>

Gabe
Apr 6 '10 #10

Sign in to post your reply or Sign up for a free account.

Similar topics

2
2776
by: Ralf Wahner | last post by:
Dear Masters of XSLT Could I ask you for a clue on the following question? I'd like to use XSLT to transform an XML source file to LaTeX. In the following small example the <para> Element contains (I think so) - a text node (node one) - an element node (node two) - a text node (node three)
2
4784
by: Geathaa | last post by:
Hi everyone, I want to transform a xml document containing the description of a menu tree to HTML. The MenuTree XML contains the target URL for each tree node. Some URL's contain parameters which are only known at runtime though. These "runtime parameters" are also set as global parameters in the XSLT stylesheet. What I want to do now is...
1
2619
by: discomiller | last post by:
Mario Mueller: Hello *, radiobuttons belong to other radiobuttons by the "name="any_value"" attribut. Thats a fakt. I got the following XML: **************************************************************
4
4131
by: Jim Garrison | last post by:
I know how to use the name() function to access the name of the current node. How do I get the 'fully qualified' name, consisting of the path from the root to the current node? I.e. <a> <b> <c> </c> </b>
4
1674
by: ina | last post by:
Hello all, I am newbie in xml and have a problem with this parse. I have this xml.file <Style> <Strategy>
3
5711
by: gregmcmullinjr | last post by:
Hi All, I would like to use XSLT to replace all <unodes that are children of a <bnode with a new <headingnode. Also, if the <bnode has no other children than remove it as well. For example: This would be some <b><u>Text</u></b>. It could <balso maybe be like <u>this</u>...</b>
2
1613
by: lanegroups | last post by:
Dear experts, I'm trying to do the following using Xalan-C++ API 1. parse an XML document 2. evaluate an XML path 3. serialize the selected XML subtree 4. The new serialized XML fragment should have the correct namespace declared, based on their declaration from the original XML document. Task 1-3 are done and I'm using the...
1
7076
by: redgrL86 | last post by:
Hi, I am trying to figure out how to see if any of a given set of childnodes equals a given string. For example, in the XML and XSL code below, I want the text in the "xsl:when" statement to output when any of the childnodes of <FormulaValue> equal the string "Value". How can I do this?? I am trying to use XPath code but I can't get it to work....
1
3984
by: SkipNRun | last post by:
I am a novice when comes to JavaScript, AJAX. I am working on a form, which will allow users to update their contact information. In order to make the form flexible, I need to use pull down list. Depends on the pull down list selection, I use script.aculo.us to validate the user input before submit and pass the necessary data, such as contact...
11
4540
by: Ebenezer | last post by:
Let's suppose I have some nodes in an XML file, with an URL attribute: <node url="mypage.php?name1=value1&foo=bar&foo2=bar2&name2=value0" /> <node url="myotherpage.php?name4=value4&foo=bar3&foo2=bar5&name2=value8" /> and so on. Let's suppose I want to retrieve this @url parameter, BUT ONLY with the values, in querystring, associated...
0
7815
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main...
0
8077
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. ...
0
8257
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that...
1
7828
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For...
0
8113
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the...
0
5316
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert...
1
2253
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
1
1358
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
0
1076
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.