• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 426
  • Last Modified:

PowerShell to C# XML Help

I just recently got into using PowerShell because it is quite amazing for, well, just about anything. And it's easy to learn, I do have a need to use c# time to time however, as I am part of a much larger project,  Is there something as simple as this PowerShell Call in C#

[xml]$myXML = Get-Content drive:\path\to\myfile.xml
0
jjthomas3
Asked:
jjthomas3
  • 3
  • 2
1 Solution
 
käµfm³d 👽Commented:
It should be as simple as:
System.Xml.XmlDocument myXML = new System.Xml.XmlDocument();

myXML.Load("drive:\path\to\myfile.xml");

Open in new window

0
 
jjthomas3Author Commented:
In PowerShell if I delcare

[xml]$myXML = Get-Content drive:\path\to\myfile.xml

And myFile.XML looks like this one here:

<?xml.....   >
<application name="my Application">
  <connections>234</connections>
  <lastUser>Mr. Sinatra</lastUser>
</application>

Open in new window


I do not have to write any more code to directly interact with the XML..... so that if I were to output the value of $myXML.Application.Name the return would be "my Application". Likewise, if I had the following XML file, services.xml:
 
<?xml....>
<services>
    <service>
         <name>SampleService01</spooler>
         <description>Windows Sample Service 01</description>
    </service>
    <service>
         <name>SampleService02</spooler>
         <description>Windows Sample Service 02</description>
    </service>
    <service>
         <name>SampleService03</spooler>
         <description>Windows Sample Service 03</description>
    </service>
    <service>
         <name>SampleService04</spooler>
         <description>Windows Sample Service 04</description>
    </service>
</services>

Open in new window


I could simply perform the following foreach loop
 
[xml]$services= Get-Content drive:\path\to\services.xml
foreach ($service in $services) {
     Write-Host "Service Name:`t$service.Name"
     Write-Host "Description :`t$service.Description"
     ......perform other actions or logic against service....
}

//Or even access the members/nodes directly

Start-Service $services.Services.Service[1].Name

Open in new window



I don't have to write any additional code to parse the data out of the XML File. I was hoping for something as simple in C# with having to iterate through NodeTypes, or using Reader.Read() with switch statements etc.
0
 
käµfm³d 👽Commented:
I don't believe you can get that much automatic interaction, at least not without some initial scaffolding, but I also don't believe the code to interact with the file is that much different. Given you last code post ( http:#codeSnippet8210165 ), I would envision an equivalent in C# to be:

namespace _27326029
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Xml.XmlDocument myXML = new System.Xml.XmlDocument();

            myXML.Load(@"input.xml");

            foreach (System.Xml.XmlNode service in myXML.SelectNodes("//service"))
            {
                System.Console.WriteLine("Service Name: {0}", service.SelectSingleNode("name").InnerText);
                System.Console.WriteLine("Description: {0}\n", service.SelectSingleNode("description").InnerText);
            }

            System.Console.ReadKey();
        }
    }
}

Open in new window



Untitled.png
0
 
käµfm³d 👽Commented:
What I meant by "automatic interaction" was demonstrated in your code as:

t$service.Name

Open in new window


It appears that PS actually creates an underlying object for you with the property names set to the node names. You'll notice above that I had to refer to the nodes using strings (in the Select*Node* calls). You can get something similar to what you have, but it would rely on the aforementioned "scaffolding".
0
 
jjthomas3Author Commented:
PowerShell makes it much easier, but unfortunately there's no automatic serialization/deserialization. So, that having been said, there's not much more code  than what I was doing in PS. Thanks.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

On-Demand: Securing Your Wi-Fi for Summer Travel

Traveling this summer?Check out our on-demand webinar to learn about the importance of Wi-Fi security and 3 easy measures you can start taking immediately to protect your private data while using public Wi-Fi. Follow us today to learn more!

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now