2017-09-29 20 views
0

これは私のXMLファイルで、xmlnsを含んでいます。私は動的ファイルのすべてのノードを読み込もうとしています。Linq to XML Read XPath(すべてのノードを読む)

最初のノード(ドキュメント)は正常に動作しますが、他のノードは正常に動作します。

これで私を助けることができます。

<?xml version="1.0" encoding="UTF-8"?><Document> 
<BkToCstmrAcctRpt xmlns="urn:iso:std:iso:325235:tech:xsd:camt.052.001.03"> 
<GrpHdr> 
<MsgId>NONREF</MsgId> 
<CreDtTm>2017-09-27T15:10:01.597560</CreDtTm> 
<MsgPgntn> 
<PgNb>1</PgNb> 
<LastPgInd>true</LastPgInd> 
</MsgPgntn> 
</GrpHdr> 
<Rpt> 
<Id>T2S</Id> 
<CreDtTm>2017-09-27T15:10:01.597560+02:00</CreDtTm> 
<Acct> 
<Id> 
<Othr> 
<Id>24234234234234234234we234</Id> 
</Othr> 
</Id> 
<Ccy>EUR</Ccy> 
<Ownr> 
<Id> 
<OrgId> 
</OrgId> 
</Id> 
</Ownr> 
<Svcr> 
<FinInstnId> 
<BICFI>HJASDESPBESMMXXX</BICFI> 
</FinInstnId> 
</Svcr> 
</Acct> 
<Bal> 
<Tp> 
<CdOrPrtry> 
<Prtry>CASH</Prtry> 
</CdOrPrtry> 
</Tp> 
<Amt Ccy="EUR">0.00</Amt> 
<CdtDbtInd>CRDT</CdtDbtInd> 
<Dt> 
<Dt>2017-09-27</Dt> 
</Dt> 
</Bal> 
<Bal> 
<Tp> 
<CdOrPrtry> 
<Prtry>PCAS</Prtry> 
</CdOrPrtry> 
</Tp> 
<Amt Ccy="EUR">469035826.79</Amt> 
<CdtDbtInd>CRDT</CdtDbtInd> 
<Dt> 
<Dt>2017-09-27</Dt> 
</Dt> 
</Bal> 
<Bal> 
<Tp> 
<CdOrPrtry> 
<Prtry>AOIC</Prtry> 
</CdOrPrtry> 
</Tp> 
<Amt Ccy="EUR">0.00</Amt> 
<CdtDbtInd>CRDT</CdtDbtInd> 
<Dt> 
<Dt>2017-09-27</Dt> 
</Dt> 
</Bal> 
<Bal> 
<Tp> 
<CdOrPrtry> 
<Prtry>SPCA</Prtry> 
</CdOrPrtry> 
</Tp> 
<Amt Ccy="EUR">469035826.79</Amt> 
<CdtDbtInd>CRDT</CdtDbtInd> 
<Dt> 
<Dt>2017-09-27</Dt> 
</Dt> 
</Bal> 
<TxsSummry> 
<TtlNtriesPerBkTxCd> 
<NbOfNtries>0</NbOfNtries> 
<Sum>0.00</Sum> 
<CdtDbtInd>CRDT</CdtDbtInd> 
<BkTxCd> 
<Prtry> 
<Cd>AVLI</Cd> 
</Prtry> 
</BkTxCd> 
</TtlNtriesPerBkTxCd> 
<TtlNtriesPerBkTxCd> 
<NbOfNtries>313</NbOfNtries> 
<Sum>469035826.79</Sum> 
<CdtDbtInd>CRDT</CdtDbtInd> 
<BkTxCd> 
<Prtry> 
<Cd>AVSI</Cd> 
</Prtry> 
</BkTxCd> 
</TtlNtriesPerBkTxCd> 
</TxsSummry> 
</Rpt> 
</BkToCstmrAcctRpt> 
</Document> 

そして、これが私のソースコードです:

using (XmlReader reader = XmlReader.Create(_ms)) 
    { 
     var docXml = XDocument.Load(reader); 

     var prefix = ((XElement)(docXml.Root.FirstNode)).Name.LocalName; 
     var nameSpace = ((XElement)(docXml.Root.FirstNode)).Name.NamespaceName; 

     XmlNameTable nameTable = reader.NameTable; 
     XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable); 
     namespaceManager.AddNamespace(string.Empty, nameSpace); 

     var filterOpt = docXml.Root.Document.XPathSelectElements("BkToCstmrAcctRpt", namespaceManager); 
    } 

私はドキュメントを[OK]を動作しますが、私は読んしようとした場合、//ドキュメント/ BkToCstmrAcctRptまたは別のサブノード結果// XPathを読めばcount = 0

+0

可能な複製(https://stackoverflow.com/questions/2998710/xdocument-containing-namespaces) – rene

+0

をそれが重複質問はありません。 XMLは異なりますが、ノードヘッダー名前空間はありません。 – darthlitox

+0

解決策は同じです... – rene

答えて

1

次の名前空間の問題を修正してください。 :[XDocument含む名前空間]の

 const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 
      XElement BkToCstmrAcctRpt = doc.Descendants().Where(x => x.Name.LocalName == "BkToCstmrAcctRpt").FirstOrDefault(); 
      XNamespace ns = BkToCstmrAcctRpt.GetDefaultNamespace(); 

      XElement LastPgInd = BkToCstmrAcctRpt.Descendants(ns + "LastPgInd").FirstOrDefault(); 
     } 
+0

ありがとう@jdweng – darthlitox