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