XPath выберите узел в Xaml

1

Я хотел бы сопоставить узел внутри xaml файла, и мой файл выглядит так:

Некоторый вход Xaml (xml-like):

<SomeNode> <!-- this is root btw -->
    <!-- [...] -->
    <SomeNode.AnyProperty>
        <!-- [...] -->
    </SomeNode.AnyProperty>
    <!-- [...] -->
</SomeNode>

и я хочу математику только в разделе " SomeNode.AnyProperty ". Впоследствии я хочу заменить найденный узел на сгенерированный.

Любые предложения для рабочего выражения XPath? Я пробовал общее выражение, подобное тем, которые я бы применил в обычном xml файле, например: "SomeNode.AnyProperty". Но наверняка это не сработало.

Рабочее решение:

Спасибо за поддержку. Проблема заключалась не в выражении XPath itselft. Кроме того, это было объявление пространства имен моего входного файла xaml. Чтобы избежать этих проблем с пространством имен, я использовал модифицированную версию решения @malkam.

  XDocument doc = XDocument.Load("someFile.xaml");
  //Get required element
  XElement nodeToReplace = doc.Elements().Where(x => x.Name.LocalName == "SomeNode.AnyProperty").FirstOrDefault() as XElement;
  //replace it with requried element
  nodeToReplace.ReplaceWith(someOtherNodeIGeneratedEarlier);
  doc.Save("someFile_editet.xaml");
Теги:
xpath
xaml

1 ответ

2
Лучший ответ

Попробуй это.

//Load xml in XElement
string xml="xml";
XElement xmlTree=XElement.Parse(xml);
//Get required element
XElement child = xmlTree.Element("SomeNode.AnyProperty");
//replace it with requried element
child.ReplaceWith(
    new XElement("NewChild", "new content")
);

См. Ниже ссылки для более подробной информации.

http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement_methods%28v=vs.110%29.aspx

http://msdn.microsoft.com/en-IN/library/bb302711.aspx

  • 0
    Вопрос конкретно задается о XPath.
  • 0
    Способ использования XElement вместо XmlDocument а затем XmlDocument.SelectNode(XPath xpath) решил мою проблему. Мне пришлось использовать обходной путь, чтобы избежать проблем с пространством имен, но в конце концов он делает свою работу! Я добавлю решение вопроса выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню