Как я могу отфильтровать XML-файл с атрибутом?

1

Привет, я хочу управлять xml файлом... для этого я использую linq для xml.

private string GetGroup(string xml, string id) 
        {
            XDocument document;
            XElement element;

            try
            {
                document = XDocument.Load(xml);
                //element = document.Root.Elements("Permissiongroup").FirstOrDefault(e => e.Element("id").Value == id);

                element = document.Elements("Permissiongroup").FirstOrDefault(e => e.Element("id").Value == id);

                if (element != null)
                {
                    return element.Element("display").Value;
                }
                else
                {
                    return string.Empty;
                }
            }
            catch (Exception)
            {
                return null;
            }
            finally 
            {
                document = null;
                element = null;
            }

        }

вот мой xml:

<?xml version="1.0" encoding="iso-8859-1"?>

<Permissiongroup>
  <Permission id="Hessen" display="KV-IT" />
  <Permission id="Berlin" display="DBG_Update" />
</Permissiongroup>

Например, я хочу, если метод...

string group = GetGroup(xmlpath, "Hessen");

группа "KV-IT"

Теги:
linq
active-directory

3 ответа

2
Лучший ответ

есть кое-что неправильное с тем, что у вас в настоящее время есть - вам не хватает разрешения из запроса и ищет элемент вместо атрибута. Следующие работы, хотя я бы разделить его, чтобы проверить наличие элементов (например, убедитесь, что есть элемент Permission и т.д.), А не полагаться на обработку ошибок.

// string group = GetGroup(xmlpath, "Hessen"); // returns KV-IT
// string group2 = GetGroup(xmlpath, "Berlin"); //DBG_Update

private string GetGroup(string xml, string id)
{
    XDocument document;
    XElement element;

    try
    {
        document = XDocument.Load(xml);

        element = document.Elements("Permissiongroup").Elements(("Permission")).FirstOrDefault(t => t.Attribute("id").Value == id);

        if (element != null)
        {
            return element.Attribute("display").Value;
        }
        else
        {
            return string.Empty;
        }
    }
    catch (Exception ex)
    {
        return null;
    }
    finally
    {
        document = null;
        element = null;
    }

}
1

Вы можете написать свою структуру xml и затем преобразовать xml в xsd, используя http://www.freeformatter.com/xsd-generator.html#ad-output.

После того, как у вас есть файл xsd, вы можете скачать jaxb, который преобразует файл xsd в файл POJO

а затем в вашей программе вы можете получить доступ к атрибутам xml, как это

  JAXBContext jc2 = JAXBContext.newInstance(someclassname.class);
  File xml2 = new File(xml_File);
  Unmarshaller unmarshaller2 = jc2.createUnmarshaller();
  someclassnameObject= (someclassname) unmarshaller2.unmarshal(xml2);

и может использовать объект для использования его атрибутов, например, someclassnameObject.attribute

1

Используйте метод Attribute() вместо использования Element() для доступа к атрибутам

private string GetGroup(string xml, string id) 
    {
        XDocument document;
        XElement element;

        try
        {
            document = XDocument.Load(xml);
            //element = document.Root.Elements("Permissiongroup").FirstOrDefault(e => e.Attribute("id").Value == id);

            element = document.Elements("Permissiongroup").FirstOrDefault(e => e.Attribute("id").Value == id);

            if (element != null)
            {
                return element.Attribute("display").Value;
            }
            else
            {
                return string.Empty;
            }
        }
        catch (Exception)
        {
            return null;
        }
        finally 
        {
            document = null;
            element = null;
        }

    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню