C# XDocument丢失行号
我正在使用C# XDocument丢失行号,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我正在使用XDocument解析XML文件,但是当我尝试读取XNode或XElement的行号时,它总是等于零 我尝试了不同的方法来解析它: foreach (XElement node in xDoc.Root.Descendants("nodeName")) 或 每次((IXmlLineInfo)节点)。LineNumber返回0 我使用的是XmlNamespaceManager 我错过什么了吗 提前谢谢 编辑: 下面是所问的相关Xml <?xml version="1.0" enc
XDocument
解析XML文件,但是当我尝试读取XNode
或XElement
的行号时,它总是等于零
我尝试了不同的方法来解析它:
foreach (XElement node in xDoc.Root.Descendants("nodeName"))
或
每次((IXmlLineInfo)节点)。LineNumber
返回0
我使用的是XmlNamespaceManager
我错过什么了吗
提前谢谢
编辑:
下面是所问的相关Xml
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<CstmrDrctDbtInitn>
<GrpHdr>
<MsgId>XXXXXXXXX</MsgId>
<CreDtTm>2013-06-12T00:00:00</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>136.82</CtrlSum>
<InitgPty>
<Nm>name</Nm>
<Id>
<OrgId>
<Othr>
<Id>XXXXXXXXX</Id>
</Othr>
</OrgId>
</Id>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>275-20130612-FIRST</PmtInfId>
<PmtMtd>DD</PmtMtd>
<BtchBookg>true</BtchBookg>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>136.82</CtrlSum>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
<LclInstrm>
<Cd>CORE</Cd>
</LclInstrm>
<SeqTp>RCUR</SeqTp>
</PmtTpInf>
<ReqdColltnDt>2013-06-05</ReqdColltnDt>
<Cdtr>
<Nm>name</Nm>
<PstlAdr>
<Ctry>BE</Ctry>
<AdrLine>XXXXXXXXX</AdrLine>
<AdrLine>XXXXXXXXX</AdrLine>
</PstlAdr>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>XXXXXXXXX</IBAN>
</Id>
</CdtrAcct>
<CdtrAgt>
<FinInstnId>
<BIC>XXXXXXXXX</BIC>
</FinInstnId>
</CdtrAgt>
<ChrgBr>SLEV</ChrgBr>
<CdtrSchmeId>
<Id>
<PrvtId>
<Othr>
<Id>XXXXXXXXX</Id>
<SchmeNm>
<Prtry>SEPA</Prtry>
</SchmeNm>
</Othr>
</PrvtId>
</Id>
</CdtrSchmeId>
<DrctDbtTxInf>
<PmtId>
<InstrId>XXXXXXXXX</InstrId>
<EndToEndId>XXXXXXXXX</EndToEndId>
</PmtId>
<InstdAmt Ccy="EUR">136.82</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>XXXXXXXXX</MndtId>
<DtOfSgntr>2009-10-31</DtOfSgntr>
<AmdmntInd>false</AmdmntInd>
<AmdmntInfDtls>
<AmdmntInd>yellowland</AmdmntInd>
<OrgnlMndtId>XXXXXXXXX</OrgnlMndtId>
<OrgnlCdtrSchmeId>
<Id>
<PrvtId>
<Othr>
<Id>XXXXXXXXX</Id>
<SchmeNm>
<Prtry>SEPA</Prtry>
</SchmeNm>
</Othr>
</PrvtId>
</Id>
</OrgnlCdtrSchmeId>
</AmdmntInfDtls>
</MndtRltdInf>
</DrctDbtTx>
<DbtrAgt>
<FinInstnId>
<BIC>XXXXXXXXX</BIC>
</FinInstnId>
</DbtrAgt>
<Dbtr>
<Nm>TEST</Nm>
<PstlAdr>
<Ctry>BE</Ctry>
<AdrLine>XXXXXXXXX</AdrLine>
<AdrLine>XXXXXXXXX</AdrLine>
</PstlAdr>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>XXXXXXXXX</IBAN>
</Id>
</DbtrAcct>
<RmtInf>
<Ustrd>test</Ustrd>
</RmtInf>
</DrctDbtTxInf>
</PmtInf>
</CstmrDrctDbtInitn>
</Document>
XXXXXXXXX
2013-06-12T00:00:00
1.
136.82
名称
XXXXXXXXX
275-20130612-FIRST
DD
真的
1.
136.82
环保总局
核心
RCUR
2013-06-05
名称
是
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
SLEV
XXXXXXXXX
环保总局
XXXXXXXXX
XXXXXXXXX
136.82
XXXXXXXXX
2009-10-31
假的
黄岛
XXXXXXXXX
XXXXXXXXX
环保总局
XXXXXXXXX
试验
是
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
测试
来自
XDocument xdoc=XDocument.Load(文件);
IEnumerable nodes=xdoc.substands(“节点名”);
foreach(节点中的XElement节点)
{
IXmlLineInfo=节点;
int lineNumber=info.lineNumber;
}
通过XDocument
加载xml时,并不总是加载行信息
您需要指定在加载XML时也要加载行信息。这是通过使用可以传入XDocument
类的LoadOptions
值的方法之一实现的
var document = XDocument.Load(file, LoadOptions.SetLineInfo);
您可以共享一些XML文件吗?并非所有XElements都有lineinfo,调用
HasLineInfo
会产生什么效果?然而,当您从文件解析时,我希望它会。既然XElement
inherits,为什么要强制转换到IXmlLineInfo
btw?HasLineInfo
返回false。除了(作为IXmlLineInfo的节点)之外,检索元素
的行号的另一种方法是什么?行号
?谢谢luliaa,但这正是我的问题<代码>信息。行号始终为零。@SeyoS有点晚了。。。但是,我也有同样的问题。如果你喜欢@Iuliia answer上的那个,它就不起作用了。您需要以这种方式显式地将XElement项强制转换为IXmlLineInfo:IXmlLineInfo=(IXmlLineInfo)节点;int lineNumber=info.HasLineInfo()?信息行号:-1代码>。所以它起作用了!也来看看
XDocument xdoc = XDocument.Load(file);
IEnumerable<XElement> nodes = xdoc.Descendants("nodeName");
foreach (XElement node in nodes)
{
IXmlLineInfo info = node;
int lineNumber = info.LineNumber;
}
var document = XDocument.Load(file, LoadOptions.SetLineInfo);