读取xml文件的子节点

时间:2014-06-15 11:06:22

标签: c# xml

我创建了一个带有示例内容的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>

我试试这个

   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子节点,我需要这些值(TYPTRT,CLAFCNO,NUMCLI,TYPACT)

2 个答案:

答案 0 :(得分:1)

使用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();

这将为您的示例x​​ml中的每个W-TIBCPTR元素返回四个字符串的数组。与Linq到Xml相同的内容如下:

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

答案 1 :(得分:0)

使用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
             });