SurinderBhomra
SurinderBhomra

Reputation: 2199

Umbraco 8 - Get Children Of Node Using ContentAtXPath() Method

I've been refactoring an existing Umbraco project to use more performant querying when getting back document data as everything was previously being returned using LINQ. I have been using a combination of Umbraco's querying via XPaths and Examine.

I am currently stumped on trying to get child documents using the Umbraco.ContentAtXPath() method. What I would like to do is get child document based on a path I parse to the method. This is what I have currently:

IEnumerable<IPublishedContent> umbracoPages = Umbraco.ContentAtXPath("//* [@isDoc]/descendant::/About [@isDoc]");

Running this returns a "Object reference not set to an instance of an object." error and unable to see exactly where I'm going wrong (new to this form of querying in Umbraco).

Ideally, I'd like to enhance the querying to also carry out sorting using the non-LINQ approach, as demonstrated here.

Upvotes: 0

Views: 2562

Answers (3)

jameswilki
jameswilki

Reputation: 11

Querying NuCache is pretty fast in Umbraco 8, only beaten by an Examine search. Assuming you're using Models Builder, and your About page is a child of Home page, you could use:

var homePage = (HomePage) Model.Root();
var aboutPage = homePage?.Children<AboutPage>().FirstOrDefault();
var umbracoPages = aboutPage.Children();

Where HomePage is your home page Document Type Alias and AboutPage is your About page Document Type alias.

Upvotes: 1

dampee
dampee

Reputation: 3437

It certainly depends on how big your dataset is.

As Umbraco has moved away from the XML backed cache, you should look into Linq queries against your content models. Make sure you use ModelsBuilder to generate the models.

On a small dataset Linq will be much quicker than examine. On a large dataset Examine/Lucene will be much more steady on performance.

Upvotes: 1

Jannik Anker
Jannik Anker

Reputation: 3425

Up until Umbraco 8, content was cached in an XML file, which made XPath perfect for querying content efficiently. In v8, however, the so called "NuCache" is not file based nor XML based, so the XPath query support is only there for ... well... Old times sake, I guess? Either way it's probably not going to be super efficient and (I'd advise) not something to "aim for". That said I of course don't know what you are changing from (Linq can be a lot of things) :-/

Upvotes: 1

Related Questions