Код Element("my:" + "Egitim_Bilgileri")
совпадает с Element("my:Egitim_Bilgileri")
, что означает элемент с именем"my: Egitim_Bilgileri" в пространстве имен по умолчанию (существует неявное преобразование из строки в XName ).
Однако :
недопустимо в имени элемента (вне разделения пространства имен) и, следовательно, приведет к выполнениюисключение по времени.
Вместо этого код должен быть Element(my + "Egitim_Bilgileri")
, где my
является XNamespace объектом.Оператор +
объекта XNamespace, когда ему передается строка в качестве второго операнда, приводит к объекту XName , который затем можно использовать с методом Element(XName)
.
Например:
XNamespace my = "http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-01-11T08:31:30";
XDocument doc = XDocument.Load(@"C:\25036077.xml");
// The following variable/assignment can be omitted,
// it is to show the + operator of XNamespace and how it results in XName
XName nodeName = my + "Egitim_Bilgileri";
XElement myEgitimBilgileri = doc.Element(nodeName);
Удачного кодирования ... и соболезнования в связи с необходимостью работать с InfoPath:)
В большинстве случаев я предпочитаю использовать XPath.Помимо прочего, он позволяет легко выбирать вложенные узлы и избегает необходимости «проверять на нулевое значение» каждый уровень, что может потребоваться для конструкций node.Element(x).Element(y)
.
using System.Xml.XPath; // for XPathSelectElement extension method
XmlNamespaceManager ns = new XmlNamespaceManager(new NameTable());
ns.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-01-11T08:31:30")
// Note that there is no XName object. Instead the XPath string is parsed
// and namespace resolution happens via the XmlNamespaceManager
XElement myEgitimBilgileri = doc.XPathSelectElement("/my:myFields/my:Egitim_Bilgileri", ns);