How to: View and Extract XML Data
This topic discusses how to use XSLT to view information in the XML that Forefront Identity Manager Synchronization Service (FIM Synchronization Service) can supply. It also explains how to use the Microsoft .NET Framework classes to extract information from the XML that FIM Synchronization Service 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> of <delta> 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 example shows how to extract some of the elements in a CsExport
XML file. It displays the information for the <attr> of <delta> 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