如何在 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();
}
我正在尝试从此 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();
}