Home > Back-end >  How to get "Header" node in C#
How to get "Header" node in C#

Time:04-29

I'm trying to get the "Header" node from this XML document and to output the XML string to the Textbox in C#, here is the input xml file:

<?xml version="1.0" encoding="UTF-8"?>
<nsSAFT:AuditFile xmlns:nsSAFT="mfp:napz:saa:d1111:declaration:v22">
    <nsSAFT:Header>
        <nsSAFT:AuditFileVersion>XX</nsSAFT:AuditFileVersion>
        <nsSAFT:AuditFileCountry>XX</nsSAFT:AuditFileCountry>
        <nsSAFT:AuditFileDateCreated>XXX</nsSAFT:AuditFileDateCreated> 
        <nsSAFT:SoftwareCompanyName>XXX</nsSAFT:SoftwareCompanyName> 
        <nsSAFT:SoftwareID>XXXX</nsSAFT:SoftwareID> 
        <nsSAFT:SoftwareVersion>XXX</nsSAFT:SoftwareVersion> 
        <nsSAFT:Company>
            <nsSAFT:RegistrationNumber>XXX</nsSAFT:RegistrationNumber> 
            <nsSAFT:Name>XXXX</nsSAFT:Name>
            <nsSAFT:Address>
                <nsSAFT:StreetName>XXX</nsSAFT:StreetName> 
                <nsSAFT:City>XXXX</nsSAFT:City> 
                <nsSAFT:PostalCode>XXX</nsSAFT:PostalCode> 
                <nsSAFT:Country>XXX</nsSAFT:Country> 
            </nsSAFT:Address>
            <nsSAFT:Contact>
                <nsSAFT:ContactPerson>
                    <nsSAFT:FirstName>XXX</nsSAFT:FirstName> 
                    <nsSAFT:LastName>XXXX</nsSAFT:LastName> 
                </nsSAFT:ContactPerson>
                <nsSAFT:Telephone>XXXXX</nsSAFT:Telephone> 
            </nsSAFT:Contact>
            <nsSAFT:BankAccount>
                <nsSAFT:IBANNumber>XXXX</nsSAFT:IBANNumber> 
            </nsSAFT:BankAccount>
        </nsSAFT:Company>
        <nsSAFT:DefaultCurrencyCode>XXXX</nsSAFT:DefaultCurrencyCode> 
        <nsSAFT:SelectionCriteria>
            <nsSAFT:SelectionStartDate>XXXX</nsSAFT:SelectionStartDate>
            <nsSAFT:SelectionEndDate>XXX</nsSAFT:SelectionEndDate> 
        </nsSAFT:SelectionCriteria>
        <nsSAFT:HeaderComment>X</nsSAFT:HeaderComment>
        <nsSAFT:SegmentIndex>X</nsSAFT:SegmentIndex> 
        <nsSAFT:TotalSegmentsInsequence>X</nsSAFT:TotalSegmentsInsequence> 
        <nsSAFT:TaxAccountingBasis>XXXX</nsSAFT:TaxAccountingBasis> 
    </nsSAFT:Header>
</nsSAFT:AuditFile>

Here is how I'm trying to get the "Header" node, with the originalDoc.Element("Header");

XDocument originalDoc = XDocument.Load(fileName);

            var list = originalDoc.Element("Header");
            string output = list.ToString();

            richTextBox1.Text = output;

But in the the debugger, the the list variable is always empty?

The result that I'm expecting:

<nsSAFT:Header>
        <nsSAFT:AuditFileVersion>XX</nsSAFT:AuditFileVersion>
        <nsSAFT:AuditFileCountry>XX</nsSAFT:AuditFileCountry>
        <nsSAFT:AuditFileDateCreated>XXX</nsSAFT:AuditFileDateCreated> 
        <nsSAFT:SoftwareCompanyName>XXX</nsSAFT:SoftwareCompanyName> 
        <nsSAFT:SoftwareID>XXXX</nsSAFT:SoftwareID> 
        <nsSAFT:SoftwareVersion>XXX</nsSAFT:SoftwareVersion> 
        <nsSAFT:Company>
            <nsSAFT:RegistrationNumber>XXX</nsSAFT:RegistrationNumber> 
            <nsSAFT:Name>XXXX</nsSAFT:Name>
            <nsSAFT:Address>
                <nsSAFT:StreetName>XXX</nsSAFT:StreetName> 
                <nsSAFT:City>XXXX</nsSAFT:City> 
                <nsSAFT:PostalCode>XXX</nsSAFT:PostalCode> 
                <nsSAFT:Country>XXX</nsSAFT:Country> 
            </nsSAFT:Address>
            <nsSAFT:Contact>
                <nsSAFT:ContactPerson>
                    <nsSAFT:FirstName>XXX</nsSAFT:FirstName> 
                    <nsSAFT:LastName>XXXX</nsSAFT:LastName> 
                </nsSAFT:ContactPerson>
                <nsSAFT:Telephone>XXXXX</nsSAFT:Telephone> 
            </nsSAFT:Contact>
            <nsSAFT:BankAccount>
                <nsSAFT:IBANNumber>XXXX</nsSAFT:IBANNumber> 
            </nsSAFT:BankAccount>
        </nsSAFT:Company>
        <nsSAFT:DefaultCurrencyCode>XXXX</nsSAFT:DefaultCurrencyCode> 
        <nsSAFT:SelectionCriteria>
            <nsSAFT:SelectionStartDate>XXXX</nsSAFT:SelectionStartDate>
            <nsSAFT:SelectionEndDate>XXX</nsSAFT:SelectionEndDate> 
        </nsSAFT:SelectionCriteria>
        <nsSAFT:HeaderComment>X</nsSAFT:HeaderComment>
        <nsSAFT:SegmentIndex>X</nsSAFT:SegmentIndex> 
        <nsSAFT:TotalSegmentsInsequence>X</nsSAFT:TotalSegmentsInsequence> 
        <nsSAFT:TaxAccountingBasis>XXXX</nsSAFT:TaxAccountingBasis> 
    </nsSAFT:Header>

CodePudding user response:

Please try the following solution.

As @RobertHarvey pointed out, it was a need to add namespace handling.

c#

void Main()
{
    const string inputFile = @"e:\Temp\eXtreme.xml";
    XDocument xdoc = XDocument.Load(inputFile);

    XNamespace ns = xdoc.Root.GetNamespaceOfPrefix("nsSAFT");
    var header = xdoc.Descendants(ns   "Header").FirstOrDefault();
    string output = header.ToString();
}
  • Related