Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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_Linq - Fatal编程技术网

C# 通过其子体获取XML属性值

C# 通过其子体获取XML属性值,c#,xml,linq,C#,Xml,Linq,我有一个这种格式的XML,我想得到行ID及其名称的列表 <ArrayOfLines xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <LineStatus ID="0" StatusDetails=""> <BranchDisruptions /> <Line ID="1" Name="Line1" /> <Status ID

我有一个这种格式的XML,我想得到行
ID
及其
名称的列表

<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>
但它不会返回任何结果。

如果有,则需要使用元素名称指定它:

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

这是我的想法,但您必须先创建列表“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);
}

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

谢谢,现在我如何获得这些值呢。foreach(查询中的XElement元素){foreach(element.Attributes()中的var属性)},但被卡住了here@user3745020您不需要foreach
,您可以通过匿名类型来完成。请参考下面我的答案。此答案中的代码不应返回任何内容,除非XML名称空间声明为默认名称空间而不是前缀名称空间(前缀名称空间仅适用于元素使用相应前缀:
)@har,这是因为它不是XML名称空间,而是xmlns:xsihere@user3745020
xmlns:xsi
是一个(或参见:,特别是名称空间声明部分)
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);
}