带有可变节点的SelectSingleNode语句

本文关键字:SelectSingleNode 语句 节点 变节 | 更新日期: 2023-09-27 18:10:53

我有两种不同模式的XML文件类型

第一模式:

<Document xmlns='"urn:iso:std:iso:20022:tech:xsd:pain.001.001.03'">
    <CstmrCdtTrfInitn>
       <PmtInf>
          <DbtrAcct>
              <Id>11111111111111111</Id>
          </DbtrAcct>
       </PmtInf>
    </CstmrCdtTrfInitn>
</Document>
第二模式:

<Document xmlns='"urn:iso:std:iso:20022:tech:xsd:pain.001.001.02'">
   <CstmrCdtTrfInitn>
      <PmtInf>
          <DbtrAcct>
               <Id>11111111111111111</Id>
          </DbtrAcct>
      </PmtInf>
   </CstmrCdtTrfInitn>
</Document>

我尝试了以下代码,以便在两种类型的模式中获得节点id的值,所有文件xml都存在于同一个文件夹中,我做了一个循环来读取所有xml文件,下面的代码不工作任何想法请?

string xmlText = File.ReadAllText(file).Replace("<Document xmlns='"urn:iso:std:iso:20022:tech:xsd:pain.001.001.03'">", "").Replace("<Document xmlns='"urn:iso:std:iso:20022:tech:xsd:pain.001.001.02'">", "").Replace("</Document>", "").Replace("<CstmrCdtTrfInitn>", "").Replace("</CstmrCdtTrfInitn>", "").Replace("<pain.001.001.02>", "").Replace("</pain.001.001.02>", "");
var doc = new XmlDocument();
doc.LoadXml(xmlText);
string id= doc.SelectSingleNode("./PmtInf/DbtrAcct/Id")["id"].InnerText; ;
MessageBox.Show(id);

带有可变节点的SelectSingleNode语句

您不需要这些字符串操作。使用Linq编辑Xml

var id = (string)XDocument.Load(filename)
                          .Descendants()
                          .FirstOrDefault(d => d.Name.LocalName == "Id");

也可以使用XPath

var id = (string)XDocument.Load(filename).XPathSelectElement("//*[local-name()='Id']");
相关文章:
  • 没有找到相关文章