В примере Вы представляете единственную создаваемую вещь, атрибут...
XmlElement element = (XmlElement)doc.SelectSingleNode("/feed/entry/content");
if (element != null)
element.SetAttribute("source", "");
, Если то, что Вы действительно хотите, должно смочь создать иерархию, где она не существует затем, Вы могли свой собственный простой xpath синтаксический анализатор. Я не знаю о хранении атрибута в xpath все же. Я скорее снял узел в качестве элемента и гвоздя на.SetAttribute, поскольку я сделал здесь:
static private XmlNode makeXPath(XmlDocument doc, string xpath)
{
return makeXPath(doc, doc as XmlNode, xpath);
}
static private XmlNode makeXPath(XmlDocument doc, XmlNode parent, string xpath)
{
// grab the next node name in the xpath; or return parent if empty
string[] partsOfXPath = xpath.Trim('/').Split('/');
string nextNodeInXPath = partsOfXPath.First();
if (string.IsNullOrEmpty(nextNodeInXPath))
return parent;
// get or create the node from the name
XmlNode node = parent.SelectSingleNode(nextNodeInXPath);
if (node == null)
node = parent.AppendChild(doc.CreateElement(nextNodeInXPath));
// rejoin the remainder of the array as an xpath expression and recurse
string rest = String.Join("/", partsOfXPath.Skip(1).ToArray());
return makeXPath(doc, node, rest);
}
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<feed />");
makeXPath(doc, "/feed/entry/data");
XmlElement contentElement = (XmlElement)makeXPath(doc, "/feed/entry/content");
contentElement.SetAttribute("source", "");
Console.WriteLine(doc.OuterXml);
}
Я придумал это решение, но напишите, если у вас есть лучшее решение. Спасибо!
DependencyObject ucParent = this.Parent;
while (!(ucParent is UserControl))
{
ucParent = LogicalTreeHelper.GetParent(ucParent);
}
UserControl имеет свойство .Parent, которое должно предоставить вам доступ к его родительскому объекту.
Затем вы можете преобразовать его в свой объект ParentUC.
Вы всегда можете использовать VisualTreeHelper.GetParent (child)
, чтобы вернуть родительский элемент в визуальном дереве (родительский пользовательский элемент управления из вложенного пользовательского элемента управления).