I have an XML document which looks something like this:
MENSWEAR
Union
In order to get both nodes you need to use union operator - |
For example, the next query will return both type of nodes - comp_div
and sty_ret_type
:
/meadinkent/record/comp_div | /meadinkent/record/sty_ret_type
Filter by sub-nodes values
In order to filter node based on its sub-nodes values you need to place all conditions in same brackets [nodeA='value1' and nodeB='value2']
For example, the next query will return record nodes whose sub nodes match the filter:
/meadinkent/record[comp_div='MENSWEAR' and sty_ret_type='ACCESSORIES']
A C# union example:
[Test]
public void UnionExample()
{
string xml =
@"
MENSWEAR
ACCESSORIES
BELTS
AWESOME_BELTS
";
XDocument xDocument = XDocument.Parse(xml);
IEnumerable selectedElements =
xDocument.XPathSelectElements(
"/meadinkent/record/comp_div | /meadinkent/record/sty_ret_type");
Assert.That(selectedElements.Count(), Is.EqualTo(2));
}
A C# filter by sub-nodes example:
[Test]
public void FilterExample()
{
string xml =
@"
MENSWEAR
ACCESSORIES
BELTS
AWESOME_BELTS
";
XDocument xDocument = XDocument.Parse(xml);
IEnumerable selectedElements =
xDocument.XPathSelectElements(
"/meadinkent/record[comp_div='MENSWEAR' and sty_ret_type='ACCESSORIES']");
Assert.That(selectedElements.Count(), Is.EqualTo(1));
Assert.That(selectedElements.First().Name.LocalName, Is.EqualTo("record"));
}