0

I want to select all user nodes m:properties from XmlDocument object in XMLNodeList object with C#! How to do this?

This is my C# code where get xml document:

XmlDocument navEmployesXML = GetXmlDataFromUrl("MYURL");
XmlNodeList nodelist = navEmployesXML.SelectNodes("/feed/entry"); I try with full path but doesnt working

This is my xml document format:

<?xml version="1.0" encoding="UTF-8"?>
-
<feed
    xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
    xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
    xmlns="http://www.w3.org/2005/Atom" xml:base="http://10.20.1.8:7018/activity/OData/">
    <id>http://12333:7018/activity/OData/EmList</id>
    <title type="text">EmList</title>
    <updated>2018-07-13T14:40:29Z</updated>
    <link title="EmList" href="EmList" rel="self"/>-
    <entry m:etag="W/"'36%3BUBQAAAJ7%2FxAEEgQVBBcEFQQSBBAEAAAAAA%3D%3D7%3B33898870%3B'"">
        <id>http://12333:7018/activity/OData/EmList('%D0%90%D0%92%D0%95%D0%97%D0%95%D0%92%D0%90')</id>
        <category scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" term="NAV.EmList"/>
        <link title="EmList" href="EmList('%D0%90%D0%92%D0%95%D0%97%D0%95%D0%92%D0%90')" rel="edit"/>
        <title/>
        <updated>2018-07-13T14:40:29Z</updated>-
        <author>
            <name/>
        </author>-
        <content type="application/xml">-
            <m:properties>
                <d:No>avezeva</d:No>
                <d:Company>My Company</d:Company>
                <d:FullName>Angelina Dangeloa</d:FullName>
                <d:USERID_1>myDomain\AVEZEVA</d:USERID_1>
                <d:Job_Title>Organisator</d:Job_Title>
                <d:Department>MY SOFT</d:Department>
                <d:ManagerID>myDomain\AIVANOV</d:ManagerID>
                <d:Days_of_current_year m:type="Edm.Int32">20</d:Days_of_current_year>
                <d:Days_of_last_year m:type="Edm.Int32">0</d:Days_of_last_year>
                <d:Deputy>myDomain\AVEZEVA;myDomain\MMANASIEVA</d:Deputy>
                <d:Deputy1/>
                <d:Second_possition/>
                <d:Union_Membership_No/>
                <d:ETag>36;UBQAAAJ7/xAEEgQVBBcEFQQSBBAEAAAAAA==7;33898870;</d:ETag>
            </m:properties>
        </content>
    </entry>-

I want all nodes → entry - with all users information

3
  • 1
    Could you please edit your question and paste the XML string as text? Commented Jul 16, 2018 at 7:02
  • 1
    you have to pass full xpath, not just m:properties Commented Jul 16, 2018 at 7:06
  • I edit my question with path to m:properties. Commented Jul 16, 2018 at 7:12

1 Answer 1

1

You have a namespace issue. I recommend using Xml Linq with a dictionary like code below

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication53
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            string feed = File.ReadAllText(FILENAME);            
            XDocument doc = XDocument.Parse(feed);

            XElement properties = doc.Descendants().Where(x => x.Name.LocalName == "properties").FirstOrDefault();

            Dictionary<string, string> dict = properties.Elements()
                .GroupBy(x => x.Name.LocalName, y => (string)y)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());

        }
    }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.