XPath Property
Provides a way to point to a specific element in the response.
Syntax
property XPath: String read get_XPath write set_XPath;
Default Value
''
Remarks
XPath may be set to navigate to specific elements within the JSON document. This will be the path to a specified value within the document. Since arrays in JSON only contain values, and no associated object name, an empty name will be used for these values. To reach an array element at position 1, the path must be set to "[1]". In addition, a root element named "json" will be added to each JSON document in the parser.
BuildDOM must be set to True prior to parsing the document for the XPath functionality to be available.
The XPath property accepts both XPath and JSONPath formats. Please see notes below on both formats.
XPath
The path is a series of one or more element accessors separated by '/'. The path can be absolute (starting with '/') or relative to the current XPath location.
The following are possible values for an element accessor:
'name' | A particular element name. |
[i] | The i-th subelement of the current element. |
.. | the parent of the current element. |
When XPath is set to a valid path the following properties are updated:
- XElement
- XElementType
- XParent
- XText
- XSubTree
- XChildren*
BuildDOM must be set to True prior to parsing the document for the XPath functionality to be available.
Simple JSON document
{
"firstlevel"
: {
"one"
:
"value"
,
"two"
: [
"first"
,
"second"
],
"three"
:
"value three"
}
}
Document root | JsonControl.XPath = "/" |
Specific Element | JsonControl.XPath = "/json/firstlevel/one/" |
i-th Child | JsonControl.XPath = "/json/firstlevel/two/[i]/" |
Note: When using XPath notation the root element is always referred to as "json". As in the above examples this means all paths will begin with "/json".
JSONPath
This property implements a subset of the JSONPath notation. This may be set to point to a specific element in the JSON document.The JSONPath is a series of one or more accessors in either dot-notation
$.store.book[0].title
$[
'store'
][
'book'
][0][
'title'
]
After setting XPath the following properties are populated:
ExamplesGiven the following JSON document:
{
"store"
: {
"book"
: [
{
"category"
:
"reference"
,
"author"
:
"Nigel Rees"
,
"title"
:
"Sayings of the Century"
,
"price"
: 8.95
},
{
"category"
:
"fiction"
,
"author"
:
"Evelyn Waugh"
,
"title"
:
"Sword of Honour"
,
"price"
: 12.99
},
{
"category"
:
"fiction"
,
"author"
:
"Herman Melville"
,
"title"
:
"Moby Dick"
,
"isbn"
:
"0-553-21311-3"
,
"price"
: 8.99
},
{
"category"
:
"fiction"
,
"author"
:
"J. R. R. Tolkien"
,
"title"
:
"The Lord of the Rings"
,
"isbn"
:
"0-395-19395-8"
,
"price"
: 22.99
}
],
"bicycle"
: {
"color"
:
"red"
,
"price"
: 19.95
}
},
}
Get the first book's author:
json.XPath =
"$.store.book[0].author"
;
Console.WriteLine(json.XText);
//Output
//"Nigel Rees"
json.XPath =
"$.store.book[0]"
;
Console.WriteLine(
"Child Count: "
+ json.XChildren.Count);
Console.WriteLine(json.XChildren[1].Name +
": "
+ json.XChildren[1].XText);
//Output
//Child Count: 4
//author: "Nigel Rees"
json.XPath =
"$['store']['book'][1]['price']"
;
Console.WriteLine(json.XText);
//Output
//12.99
json.XPath =
"$['store']['book'][last() - 1]['author']"
;
Console.WriteLine(json.XText);
Console.WriteLine(json.XPath);
//Note that "last() - 1" is resolved to "3".
//Output
//"Herman Melville"
//$['store']['book'][3]['author']
json.XPath =
"$.store.book[0]"
;
Console.WriteLine(json.XSubTree);
//Output
// {
// "category": "reference",
// "author": "Nigel Rees",
// "title": "Sayings of the Century",
// "price": 8.95
// }