Viewing and Extracting XML Data

This topic discusses how to use XSLT to view information in the XML that Microsoft Identity Integration Server 2003 can supply. This topic also explains how to use the .NET Framework classes to extract information from the XML that Microsoft Identity Integration Server 2003 can supply.

Using XSLT to View XML Data

The following example shows how to view some of the elements in a CsExport XML file using XSLT. It displays the information for the <attr> elements with a displayName, employeeStatus, or employeeType attribute for any object in a <synchronized-hologram> section.

To make this XSLT work, you must insert the following lines into the XML file as the first lines, where CsExport.xsl is the name of the file containing the XSL commands:

<?xml version="1.0" ?> <?xml-stylesheet type="text/xsl" href="CsExport.xsl"?>

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    
    <xsl:template match="/">
    
    <TABLE border = "2" bgcolor="#FFFFFF">
      <TR>
        <TH>Display Name</TH>
        <TH>Employee Status</TH>
        <TH>Employee Type</TH>
      </TR>
    
      <xsl:for-each select="/cs-objects/cs-object">
      <xsl:variable name="object" select="."/>
    
        <TR>
          <xsl:for-each select="$object/synchronized-hologram/entry/attr">
            <xsl:variable name="attribute" select="."/>
    
            <xsl:if test="$attribute/@name = 'displayName'">
              <TD>
                <xsl:value-of select="$attribute/value"/>
              </TD>
            </xsl:if>
    
            <xsl:if test="$attribute/@name = 'employeeStatus'">
              <TD>
                <xsl:value-of select="$attribute/value"/>
              </TD>
            </xsl:if>
    
            <xsl:if test="$attribute/@name = 'employeeType'">
              <TD>
                <xsl:value-of select="$attribute/value"/>
              </TD>
            </xsl:if>
    
          </xsl:for-each>
        </TR>
    
        </xsl:for-each>
    </TABLE>

    </xsl:template>
    </xsl:stylesheet>

Extracting Information from XML Data

The following code snippet shows how to extract some of the elements in a CsExport XML file. It displays the information for the <attr> elements with a displayName, employeeStatus, or employeeType attribute for any object in a <synchronized-hologram> section.

    Imports System
    Imports System.IO
    Imports System.Text
    Imports System.Xml
    
    Module Module1
    
        Sub Main()
            ' The hologram
            Dim sHologram      As String = "cs-object/synchronized-hologram/"
    
            Dim DisplayName    As String = sHologram + "entry/attr[@name='displayName']/value"
            Dim EmployeeStatus As String = sHologram + "entry/attr[@name='employeeStatus']/value"
            Dim EmployeeType   As String = sHologram + "entry/attr[@name='employeeType']/value"
    
            Console.WriteLine("Enter the name of the XML file")
            filename = Console.ReadLine()
    
            Try
                Dim mySR   As StreamReader  = File.OpenText(filename)
                Dim reader As XmlTextReader = new XmlTextReader(mySR)
                Dim doc    As XmlDocument   = new XmlDocument()
                
                doc.Load(reader);
    
                dim attrNode As XmlNode
    
                attrNode = doc.DocumentElement.SelectSingleNode(DisplayName)
    
                If Not attrNode Is Nothing Then
                    Console.WriteLine("DisplayName: " + attrNode.InnerText)
                End If
    
                attrNode = doc.DocumentElement.SelectSingleNode(EmployeeStatus)
    
                If Not attrNode Is Nothing Then
                    Console.WriteLine("EmployeeStatus: " + attrNode.InnerText)
                End If
    
                attrNode = doc.DocumentElement.SelectSingleNode(EmployeeType)
    
                If Not attrNode Is Nothing Then
                    Console.WriteLine("EmployeeType: " + attrNode.InnerText)
                End If
            Catch xe As XmlException
                Console.WriteLine("XML Exception: " + xe.Message)
            Catch fnfe As FileNotFoundException
                Console.WriteLine("Exception: " + fnfe.Message)
            End Try
        End Sub
    End Module
    using System;
    using System.IO;
    using System.Text;
    using System.Xml;
    
    public class getAttr
    {
       [STAThread]
       static void Main(string[] args)
       {
          // The hologram
          string sHologram       = "cs-object/synchronized-hologram/";
    
          string DisplayName    = sHologram + "entry/attr[@name='displayName']/value";
          string EmployeeStatus = sHologram + "entry/attr[@name='employeeStatus']/value";
          string EmployeeType   = sHologram + "entry/attr[@name='employeeType']/value"; 
    
          Console.WriteLine("Enter the name of the XML file");
          String filename = Console.ReadLine();
    
          try
          {
             StreamReader  mySR   = File.OpenText(filename);
             XmlTextReader reader = new XmlTextReader(mySR);
             XmlDocument doc      = new XmlDocument();
                
             doc.Load(reader);
    
             XmlNode attrNode;
    
             attrNode = doc.DocumentElement.SelectSingleNode(DisplayName);
    
             if(!(attrNode == null))
             {
                Console.WriteLine("DisplayName: " + attrNode.InnerText);
             }
    
             attrNode = doc.DocumentElement.SelectSingleNode(EmployeeStatus);
    
             if(!(attrNode == null))
             {
                Console.WriteLine("EmployeeStatus: " + attrNode.InnerText);
             }
    
             attrNode = doc.DocumentElement.SelectSingleNode(EmployeeType);
    
             if(!(attrNode == null))
             {
                Console.WriteLine("EmployeeType: " + attrNode.InnerText);
             }
          }
          catch(XmlException xe)
          {
             Console.WriteLine("XML Exception: " + xe.Message);
          }
          catch(FileNotFoundException fnfe)
          {
             Console.WriteLine("Exception: " + fnfe.Message);
          }
       }
    }  // To compile: csc /r:System.Xml.dll /out:getAttr.exe getAttr.cs

Send comments about this topic to Microsoft

Build date: 2/16/2009