Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting an XML document to fluent C#

I'd like to convert an external XML document without any XSD schema associated with it into a fluent .NET object.

I have a simple XML file like:

<application>
    <parameters>
        <param></param>
        <param></param>
    </parameters>
    <generation />
    <entities>
        <entity ID="1">
            <PropTest>Test</PropTest>
        </entity>
        <entity ID="2">
            <PropTest>Another Test</PropTest>
        </entity>
     </entities>
</application>

I'd like to navigate the document like:

var xConfig = new XmlConfig("file.xml");

// testValue should be assigned "Test"
string testValue = xConfig.Generation.Entities.Entity(1).PropTest;

What is the best way to achieve this in .NET 3.5?

like image 398
Ronnie Avatar asked May 21 '26 12:05

Ronnie


2 Answers

Arguably, the best way to do this these days is with Linq to XML. It is a whole lot easier than messing with XSDs and convoluted class definitions.

XDocument doc = XDocument.Load("file.xml");
var val = doc
    .Descendants("entity")
    .Where(p => p.Attribute("ID").Value == "1")
    .Descendants("PropTest")
    .FirstOrDefault();
if (val != null)
    Console.WriteLine(val.Value);

The sample file.xml that I used was:

<?xml version="1.0" encoding="utf-8" ?>
<application>
    <parameters>
        <param></param>
        <param></param>
    </parameters>
    <generation>
        <entities>
            <entity ID="1">
                <PropTest>Test</PropTest>
            </entity>
            <entity ID="2">Another Test</entity>
        </entities>
    </generation>
</application>
like image 181
Lusid Avatar answered May 23 '26 00:05

Lusid


I just noticed that Lusid also wrote about Linq to SQL while I was writing my answer, but he used XDocument.

Here is my version (file.xml is the XML given in the question):

string testValue =
    (string) XElement.Load("file.xml")
        .Element("entities")
        .Elements("entity")
        .FirstOrDefault(entity => entity.Attribute("ID")
            .Value == "1") ?? string.Empty;
like image 20
Presidenten Avatar answered May 23 '26 02:05

Presidenten



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!