Mac OS free XML Editor

Found a really useful XML editor that runs on the Mac, XML Spear

XSL/T Transform from String to String

The following example transforms the supplied xml string, using XSL/T and outputs to another string

using (StringReader rdr = new StringReader(selectedLine.AdditionalInformation))
    XPathDocument doc = new XPathDocument(rdr);

    using (StringWriter writer = new StringWriter())

        transformer.Transform(doc, null, writer);
        titleLabel.Attributes.Add("onmouseover", string.Format(@"showDiv(""{0}"")", writer.ToString()));

The XSL/T loaded into the transformer variable is as follows


<table class='panelTable'></table>
<tr><td colspan='2' class='TitlePanelHeader'></td></tr>

And a sample xml string is as follows:


The result from the transformation is as follows:

Body Rides
Additional answer code
Additional answer date
Answer code
Answer date
AuthorRichard Laymon
Delivery toCompany Name, Address Line 1, AddressLine 2
Expected delivery09/08/2009
Held orders
Ordered on20/07/2009
Print runs

The code to build up the xml within the object is below, note that the values are HtmlEncoded to ensure that there are no problems in the web page.

public string AdditionalInformation
        StringBuilder builder = new StringBuilder();
        AddLabelValue(builder, "Account number", ParentPurchaseOrder.AccountNumber);
        AddLabelValue(builder, "Additional answer code", this.AdditionalAnswerCode);
        AddLabelValue(builder, "Additional answer date", 
            this.AdditionalAnswerDate.Year != 1 ? this.AdditionalAnswerDate.ToShortDateString() : "" );
        AddLabelValue(builder, "Answer code", this.AnswerCode);
        AddLabelValue(builder, "Answer date",
            this.AnswerDate.Year != 1 ? this.AnswerDate.ToShortDateString() : "");
        AddLabelValue(builder,"Author", this.Author);
        AddLabelValue(builder, "Delivery to",
            ParentPurchaseOrder.DeliveryName + ", " + ParentPurchaseOrder.Address1 + ", " +
                          ParentPurchaseOrder.Address2 + ", " +
                          ParentPurchaseOrder.Address3 + ", " +
                          ParentPurchaseOrder.Address4 + ", " +
                          ParentPurchaseOrder.Address5 + ", " +

        AddLabelValue(builder, "Expected delivery",
        AddLabelValue(builder, "Held orders", this.HeldOrders);
        AddLabelValue(builder, "Ordered on", ParentPurchaseOrder.OrderedOn.ToShortDateString());
        AddLabelValue(builder, "Print runs", this.PrintRuns);

        return builder.ToString();


private void AddLabelValue(StringBuilder builder, string label, string value)
                         label, HttpUtility.HtmlEncode(value)));