按其后代获取XML属性值

本文关键字:属性 XML 获取 后代 | 更新日期: 2023-09-27 18:24:07

我有一个这种格式的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;

但它没有给我任何结果。

按其后代获取XML属性值

这是我的想法,但之前必须创建列表"namesList"answers"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);
}

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

您有一个xml命名空间,您需要用元素名称来指定它:

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

试试这个。。。

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