如何在 C# 中获取 "Header" 节点

How to get "Header" node in C#

我正在尝试从此 XML 文档获取“Header”节点并将 XML 字符串输出到 C# 中的文本框,这里是输入 xml 文件:

<?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>

下面是我尝试获取“Header”节点的方法,其中 originalDoc.Element("Header");

XDocument originalDoc = XDocument.Load(fileName);

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

            richTextBox1.Text = output;

但是在调试器中,列表变量总是空的?

我期待的结果:

<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>

请尝试以下解决方案。

正如@RobertHarvey 所指出的,需要添加名称空间处理。

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();
}