public static GetElement ( System.Xml.Linq.XElement referenceElement, string xPath ) : System.Xml.Linq.XElement | ||
referenceElement | System.Xml.Linq.XElement | |
xPath | string | |
리턴 | System.Xml.Linq.XElement |
public static XElement GetElement(XElement referenceElement, string xPath)
{
var parts = xPath.Split('/');
var currentElement = referenceElement;
foreach (var part in parts)
{
if (part == "..")
{
currentElement = currentElement.Parent;
}
else
{
var splitPath = part.Split('[');
var childElementName = splitPath[0];
var index = 0;
if (splitPath.Length > 1)
{
var indexAsString = splitPath[1].Split(']')[0];
// numbering starts with 1
index = int.Parse(indexAsString) - 1;
}
currentElement = currentElement.Elements(childElementName).ElementAtOrDefault(index);
}
if (currentElement == null) break;
}
return currentElement;
}
public static bool HasReferenceTo(this XElement element, XElement target) { var referenceAttribute = element.Attribute(ReferenceAttributeName); return(referenceAttribute != null && XPathHelper.GetElement(element, referenceAttribute.Value) == target); }