带有可变节点的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);
您不需要这些字符串操作。使用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']");