通过Descendants获取XML属性值

时间:2014-09-24 10:10:31

标签: c# xml linq

我在此格式中有一个XML,我希望获得行列表ID及其Name

<ArrayOfLines xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <LineStatus ID="0" StatusDetails="">
        <BranchDisruptions />
        <Line ID="1" Name="Line1" />
        <Status ID="GS" CssClass="GoodService" Description="Good Service" IsActive="true">
            <StatusType ID="1" Description="Line" />
        </Status>
    </LineStatus>
    <LineStatus ID="1" StatusDetails="">
        <BranchDisruptions />
        <Line ID="2" Name="Line2" />
        <Status ID="GS" CssClass="GoodService" Description="Good Service" IsActive="true">
            <StatusType ID="1" Description="Line" />
        </Status>
    </LineStatus>
</ArrayOfLines>

这是我写的代码:

String xmlFilePath = @"C:/myXML.xml";
XDocument xmlFile = XDocument.Load(xmlFilePath);
var query = from c in xmlFile.Descendants("LineStatus") select c;

但它没有给我任何结果。

3 个答案:

答案 0 :(得分:2)

这是我的想法,但您必须先创建列表“namesList”和“idList”。试试这个:

XDocument xDoc = XDocument.Load("your xml file");
foreach (var elem in xDoc.Document.Descendants("line"))
{
    idList.Add(elem.Attribute("ID").Value);
    namesList.Add(elem.Attribute("Name").Value);
}

您可以通过每个列表的索引完全控制此数据。之后,您还可以创建这两个元素的对象

答案 1 :(得分:0)

您有xml namespace,需要使用元素名称指定它:

XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";
var query = from c in xmlFile.Descendants(ns + "LineStatus") select c;

答案 2 :(得分:0)

试试这个......

String xmlFilePath = @"C:/myXML.xml";
XDocument xmlFile = XDocument.Load(xmlFilePath);
var query = (from c in xmlFile.Descendants("Line") 
             select new { 
                          ID=c.Attribute("ID").Value,
                          Name=c.Attribute("Name").Value
                        }).ToList();;