Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取xml的子元素内部文本?_C#_Xml - Fatal编程技术网

C# 如何获取xml的子元素内部文本?

C# 如何获取xml的子元素内部文本?,c#,xml,C#,Xml,我有一个xml文件,其中包含 <Addresses> <Address> <Plot>79/435</Plot> <Pin> <Pin>4</Pin> </Pin> </Address> <Address> <Plot>79/438</Plot>

我有一个xml文件,其中包含

<Addresses>
    <Address>
        <Plot>79/435</Plot>
        <Pin>
            <Pin>4</Pin>
        </Pin>
    </Address>
    <Address>
        <Plot>79/438</Plot>
        <Pin>
            <Pin>6</Pin>
        </Pin>
        <pin>
            <pin>19</pin>
        </pin>
    </Address>
    <Address>
        <Plot>79/439</Plot>
        <Pin>
            <Pin>9</Pin>
        </Pin>
        <Pin>
          <Pin>10</Pin>
        </Pin>
    </Address>
</Addresses>

在这个xml中,每个都有唯一的innerText,但元素值是单个或多个…如何使用c获取和innerText…

我建议您使用XmlSerializer和XmlDeserializer,这样您的xml将转换为类对象,然后您可以使用LINQ

示例:


您应该使用指向XML的链接来实现这一点。这相当简单,请参阅以下MSDN文档

您的代码应该如下所示

        XElement root = XElement.Load("YourXML.xml");
        var Plots =
            from el in root.Elements("Address")
            select new { Plot = el.Element("Plot").Value, Pins = el.Elements("Pin").Select( p => p.Element("Pin").Value ).ToList() };

        foreach (var p in Plots)
        {
            string tmpPolt = p.Plot;
            List<string> tmpPins = p.Pins;
        }
用这个

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xmlString);

        foreach (XmlElement node in doc.GetElementsByTagName("Pin"))
        {
            if( node.FirstChild.NodeType == XmlNodeType.Text)
                Console.WriteLine(node.InnerText);
        }

经过多次尝试,我找到了自己的解决方案

XmlDocument load = new XmlDocument();
load.LoadXml(xmlString);
XmlNode xNodeAddresses = load.DocumentElement.SelectSingleNode("//Addresses");
for (int i = 0; i < xNodeAddresses.ChildNodes.Count; i++)
{
        XmlNode xnodeAddress = xNodeAddresses.ChildNodes[i];
        string plot= xnodeAddress.FirstChild.InnerText;
        //do stuff with plot
        for (int j = 0; j < xnodeAddress.ChildNodes.Count; j++)
        {                                
                 if (j>0)
                 {
                       string pin = xnodeHolding.ChildNodes[j].FirstChild.InnerText;
                       //do stuff with pin                     
                 }
        }
}