public void QueryPropertyValue()
        {
            var json = JObject.Parse(@"
                { 
                    book:   'C# in a Nutshell', 
                    author: 'Joseph Albahari' 
                }");

            var navigator   = new JObjectXPathNavigator(json);
            var queryResult = navigator.Select("/book/text()")
                              .GetResult <string>()
                              .ToList();

            Assert.AreEqual(1, queryResult.Count);
            Assert.AreEqual("C# in a Nutshell", queryResult[0]);
        }
        public void QueryPropertyByContent()
        {
            var json = JObject.Parse(@"
                { 
                    book:   'C# in a Nutshell', 
                    author: 'Joseph Albahari' 
                }");

            var navigator   = new JObjectXPathNavigator(json);
            var queryResult = navigator.Select("/author[text()='Joseph Albahari']")
                              .GetResult <JProperty>()
                              .ToList();

            Assert.AreEqual(1, queryResult.Count);
            Assert.AreEqual("author", queryResult[0].Name);
            Assert.AreEqual("Joseph Albahari", queryResult[0].Value.ToString());
        }
        public void QueryArrayItemByIndex()
        {
            var json = JObject.Parse(@"
                {
                  books: [ 
                    { name: 'C# in a Nutshell',         author: 'Joseph Albahari' }, 
                    { name: 'Programming WCF Services', author: 'Juval Lowy' } 
                  ]
                }");

            var navigator   = new JObjectXPathNavigator(json);
            var queryResult = navigator.Select("/books/_2")
                              .GetResult <JObject>()
                              .ToList();

            Assert.AreEqual(1, queryResult.Count);
            Assert.AreEqual(queryResult[0].GetValue("name").ToString(), "Programming WCF Services");
            Assert.AreEqual(queryResult[0].GetValue("author").ToString(), "Juval Lowy");
        }
        public void QueryInnerLevelItems()
        {
            var json = JObject.Parse(@"
                {
                  books: [ 
                    { name: 'C# in a Nutshell',         author: 'Joseph Albahari' }, 
                    { name: 'Programming WCF Services', author: 'Juval Lowy' } 
                  ]
                }");

            var navigator   = new JObjectXPathNavigator(json);
            var queryResult = navigator.Select("/books/*/name/text()")
                              .GetResult <string>()
                              .ToList();

            Assert.AreEqual(2, queryResult.Count);
            Assert.AreEqual("C# in a Nutshell", queryResult[0]);
            Assert.AreEqual("Programming WCF Services", queryResult[1]);
        }
        public void QueryObjectItems()
        {
            var json = JObject.Parse(@"
                { 
                    book:   'C# in a Nutshell', 
                    author: 'Joseph Albahari',
                    chapters: ['Chapter 1 Introducing C# and the .NET Framework', 'Chapter 2 C# Language Basics', '...']
                }");

            var navigator   = new JObjectXPathNavigator(json);
            var queryResult = navigator.Select("/*")
                              .GetResult <JProperty>()
                              .ToList();

            Assert.AreEqual(3, queryResult.Count);
            Assert.AreEqual("book", queryResult[0].Name);
            Assert.AreEqual("author", queryResult[1].Name);
            Assert.AreEqual("chapters", queryResult[2].Name);
        }