读取xml文件的子节点

本文关键字:子节点 文件 xml 读取 | 更新日期: 2023-09-27 18:08:36

我创建了一个Xml文件,其示例内容如下:

<?xml version="1.0" encoding="utf-8"?>
<W-TIBCPTRs>
  <W-TIBCPTR>
    <TYPTRT>FDR2 R</TYPTRT>
    <CLAFCNO VALIDE="NON">5b1</CLAFCNO>
    <NUMCLI>0067781</NUMCLI>
    <TYPACT>D</TYPACT>
  </W-TIBCPTR>
  <W-TIBCPTR>
    <TYPTRT>FDR2 R</TYPTRT>
    <CLAFCNO>511</CLAFCNO>
    <NUMCLI>0068078</NUMCLI>
    <TYPACT>D</TYPACT>
  </W-TIBCPTR>
</W-TIBCPTRs>

i try this

   XmlNodeList rowElements = doc.SelectNodes("W-TIBCPTRs/W-TIBCPTR");
            foreach (XmlElement rowElement in rowElements)
            {
                foreach (XmlElement valueElement in rowElement.ChildNodes)
                {
                    strin[] k=valueElement.Name;
                }
            }
  1. 我需要自动选择节点,因为我可以有一个xml文件与不同的节点

  2. Stock childNodes in array,我需要这些值(TYPTRT,CLAFCNO,NUMCLI,TYPACT)

读取xml文件的子节点

使用Linq to Xml很容易(我建议使用它来代替旧的XmlDocument API):

var xdoc = XDocument.Load(path_to_xml);
var result = from t in xdoc.Root.Elements("W-TIBCPTR")
             select new {
                TYPTRT = (string)t.Element("TYPTRT"),
                CLAFCNO = (string)t.Element("CLAFCNO"),
                NUMCLI = (string)t.Element("NUMCLI"),
                TYPACT = (string)t.Element("TYPACT")
             };
结果:

[
  {
    TYPTRT: "FDR2 R",
    CLAFCNO: "5b1",
    NUMCLI: "0067781",
    TYPACT: "D"
  },
  {
    TYPTRT: "FDR2 R",
    CLAFCNO: "511",
    NUMCLI: "0068078",
    TYPACT: "D"
  }
]

注意:当前您正在选择元素的名称。如果想获取数组中所有子元素的内部文本,可以使用:

string[] items = rowElement.ChildNodes.OfType<XmlElement>()
                           .Select(e => e.InnerText)
                           .ToArray();

将为示例xml中的每个W-TIBCPTR元素返回一个包含四个字符串的数组。同样的,Linq to Xml将看起来像:

var result = from t in xdoc.Root.Elements("W-TIBCPTR")
             select t.Elements().Select(e => e.Value).ToArray();    

使用Linq to XML

var doc= XDocument.Load(<path>);
var values = from c in doc.Descendants("W-TIBCPTR")       
             select new
             {
                  TYPTRT = c.Element("TYPTRT").Value,
                  CLAFCNO = c.Element("CLAFCNO").Value
                  NUMCLI = c.Element("NUMCLI").Value
                  TYPACT = c.Element("TYPACT").Value
             });