Fixes: U4-3581 Make sure advanced v7 prop editors can also be used from xslt
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user