使用属性值查找xsd元素

时间:2014-05-06 13:23:15

标签: c# xml xsd

我怎样才能找到知道它名称(station)的complexType元素? 我是初学者 这是一个完整的xsd代码: http://pastebin.com/ymuPDCCb 这不起作用。

private XElement GetComplexType(string typeName)
{
    XElement complexType = xsdSchema.Elements("complexType")
        .Where(a => a.Attributes("name").FirstOrDefault() != null && a.Attribute("name").Value==typeName)
        .FirstOrDefault();

    return complexType;
}

1 个答案:

答案 0 :(得分:0)

您必须包含xs命名空间,并且需要使用Descendants()而不是Elements()来查询所有级别,如下所示:

private static void ParseXml()
{
    XDocument doc = XDocument.Load(@"C:\schema.xml");

    if (doc != null)
    {
        XElement nodes = GetComplexType("station", doc);

        if (nodes != null)
        {
            Console.WriteLine("station found...");
        }
        else
        {
            Console.WriteLine("station NOT found!!");
        }
    }
}

private static XElement GetComplexType(string typeName, XDocument xsdSchema)
{
    XNamespace ns = "http://www.w3.org/2001/XMLSchema";
    XElement complexType = xsdSchema.Descendants(ns + "complexType")
        .Where(a => a.Attributes("name").FirstOrDefault() != null && a.Attribute("name").Value == typeName)
        .FirstOrDefault();

    return complexType;
}

检查this SO答案,了解有关Elements vs Descendants

的更多信息