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

时间:2015-11-26 11:46:01

标签: c# xml

我有一个包含...的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中,每个<plot>都有唯一的innerText,但每个<pin>的{​​{1}}元素值是单个或多个...我如何获得{{1}使用c#...

<plot> <plot>

4 个答案:

答案 0 :(得分:0)

我建议你使用XmlSerializer&amp; XmlDeserializer以便您的xml将转换为类对象,然后您可以使用LINQ

示例:

XML-Serialization-and-Deserialization-Part1

XML-Serialization-and-Deserialization-Part2

答案 1 :(得分:0)

您应该使用Link to 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;
        }

答案 2 :(得分:0)

用这个吗?

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

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

答案 3 :(得分:0)

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

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                     
                 }
        }
}