繁体   English   中英

具有变量节点的SelectSingleNode语句

[英]SelectSingleNode statement with a variable node

我有两种具有不同模式的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);

您不需要这些字符串操作。 使用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']");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM