Привет, я хочу управлять 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"
есть кое-что неправильное с тем, что у вас в настоящее время есть - вам не хватает разрешения из запроса и ищет элемент вместо атрибута. Следующие работы, хотя я бы разделить его, чтобы проверить наличие элементов (например, убедитесь, что есть элемент 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;
}
}
Вы можете написать свою структуру 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
Используйте метод 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;
}
}