Fixes: U4-3581 Make sure advanced v7 prop editors can also be used from xslt

This commit is contained in:
Shannon
2013-11-20 15:54:50 +11:00
parent 596cf2a9e1
commit 0c226d1a2c
2 changed files with 71 additions and 1 deletions

View File

@@ -62,7 +62,51 @@ namespace Umbraco.Tests
get { return DatabaseBehavior.NoDatabasePerFixture; }
}
[Test]
[Test]
public void Json_To_Xml_Object()
{
var json = "{ id: 1, name: 'hello', children: [{id: 2, name: 'child1'}, {id:3, name: 'child2'}]}";
var result = library.JsonToXml(json);
Assert.AreEqual(@"<json>
<id>1</id>
<name>hello</name>
<children>
<id>2</id>
<name>child1</name>
</children>
<children>
<id>3</id>
<name>child2</name>
</children>
</json>", result.Current.OuterXml);
}
[Test]
public void Json_To_Xml_Array()
{
var json = "[{id: 2, name: 'child1'}, {id:3, name: 'child2'}]";
var result = library.JsonToXml(json);
Assert.AreEqual(@"<json>
<arrayitem>
<id>2</id>
<name>child1</name>
</arrayitem>
<arrayitem>
<id>3</id>
<name>child2</name>
</arrayitem>
</json>", result.Current.OuterXml);
}
[Test]
public void Json_To_Xml_Error()
{
var json = "{ id: 1, name: 'hello', children: }";
var result = library.JsonToXml(json);
Assert.IsTrue(result.Current.OuterXml.StartsWith("<error>"));
}
[Test]
public void Get_Item_User_Property()
{
var val = library.GetItem(1173, "content");

View File

@@ -10,6 +10,7 @@ using System.Web;
using System.Web.UI;
using System.Xml;
using System.Xml.XPath;
using Newtonsoft.Json;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Configuration;
@@ -235,6 +236,31 @@ namespace umbraco
#region Xslt Helper functions
/// <summary>
/// This will convert a json structure to xml for use in xslt
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static XPathNodeIterator JsonToXml(string json)
{
try
{
if (json.StartsWith("["))
{
//we'll assume it's an array, in which case we need to add a root
json = "{\"arrayitem\":" + json + "}";
}
var xml = JsonConvert.DeserializeXmlNode(json, "json", false);
return xml.CreateNavigator().Select("/");
}
catch (Exception ex)
{
var xd = new XmlDocument();
xd.LoadXml(string.Format("<error>Could not convert json to xml. Error: {0}</error>", ex));
return xd.CreateNavigator().Select("/");
}
}
/// <summary>
/// Add a session variable to the current user
/// </summary>