Umbraco C# Razor - Parsing XML example using uComponents URL picker to a list of Documents from the Media section


The code below shows you how to get a chosen list of documents using the uComponents Multi-Url picker

The Code that is comment out highlights the steps to get to the end result.

The Code shows how to parse raw XML in Razor.



Here is what the code does:

Step 1) "Get the Document List:"

var urlPicker = Model.GetPropertyValue<UrlPickerState>("pickDocuments");

"pickDocuments" is the field in my Document Type it is a uComponents Multi Midia Picker

Step 2) Get Type and display full string:

This code is comment out - if you uncoment it, it will show you the raw XML that needs to be parsed, for example:

@urlPicker  displays the xml:

<multi-url-picker><url-picker mode="Media"><new-window>False</new-window><node-id>1721</node-id><url>/media/53699/learning-log-v4-macroless-.xls</url><link-title /></url-picker><url-picker mode="Media"><new-window>False</new-window><node-id>1676</node-id><url>/media/46249/TestDocumentOne.docx</url><link-title /></url-picker></multi-url-picker>

So from the XML, we can see the properties/fields we want to write out.  For example "url", or "node-id".

Step 3) The Code then gets the XML and cleans it up a bit by remvoing the minus sign from some of the elements.  The reason for this is that later on in the code, razor was treating the minus sign as a subtraction, resulting in an error.

var xml = @Library.ToDynamicXml(Model.GetPropertyValue<UrlPickerState>("pickDocuments").Replace("-", ""));

Step 4) Loops around the XML records, gers the Node Id and writes out the links

The Code:


@inherits umbraco.MacroEngines.DynamicNodeContext
@using uComponents.Core
@using uComponents.DataTypes.UrlPicker.Dto;

@{                  
if (Model.HasValue("pickDocuments"))
{
// 1) Get the documents List
        var urlPicker = Model.GetPropertyValue<UrlPickerState>("pickDocuments");

//2) Get Type and display full string:
   //@urlPicker.GetType()
   //@urlPicker

// 3 Get the XML and clean it up; we need to remove the minus sign as node-id for example does notwork
var xml = @Library.ToDynamicXml(Model.GetPropertyValue<UrlPickerState>("pickDocuments").Replace("-", ""));

foreach(var value in xml)
{
// Ger the Node referenced in the XML
var thisNode = Library.NodeById(value.nodeid);


<p>&bull; <a href="@thisNode.Url">@thisNode.Name</a></p>
}
}
}


Result:

This screen shows the Umbraco user selecting multiple documents from the media section:


This screen show the Output on the web page (along with the RAW XML, which should be commented out):





Comments

Popular posts from this blog

Umbraco Razor Sort Nodes Ascending or Descending

Umbraco Razor get Querystring

Create a .NET Contact Form that Gets the Last Url Visited in C# Can also be Used in Umbraco