Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到XML读取XPath(读取所有节点)_C#_Xml_Linq_Xpath_Linq To Xml - Fatal编程技术网

C# Linq到XML读取XPath(读取所有节点)

C# Linq到XML读取XPath(读取所有节点),c#,xml,linq,xpath,linq-to-xml,C#,Xml,Linq,Xpath,Linq To Xml,这是我的XML文件,包含一个xmlns。我正在尝试读取动态文件的所有节点 第一个节点文档工作正常,但其他节点没有 你能帮我吗 <?xml version="1.0" encoding="UTF-8"?><Document> <BkToCstmrAcctRpt xmlns="urn:iso:std:iso:325235:tech:xsd:camt.052.001.03"> <GrpHdr> <MsgId>NONREF</Ms

这是我的XML文件,包含一个xmlns。我正在尝试读取动态文件的所有节点

第一个节点文档工作正常,但其他节点没有

你能帮我吗

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

如果我读取xpath//Document工作正常,但是如果我尝试读取//Document/bktostmracctrpt或另一个子节点,结果是count=0

请尝试以下解决名称空间问题的方法:

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

这不是一个重复的问题。XML是不同的,它不是节点头名称空间。解决方案是一样的…嗨,Rene,谢谢你的回复。我尝试了另一个帖子的解决方案,但不适合我。你有办法解决这个问题吗?非常感谢。非常感谢@jdweng
        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();
        }