Проверить наличие элемента XML в файле XML - PullRequest
1 голос
/ 23 сентября 2019

У меня есть XML-файл, как показано ниже,

<?xml version="1.0"?>
<MainClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Items>
    <Settings xsi:type="FileModel">
      <Name>FileOne</Name>
      <IsActive>true</IsActive>
      <IsHidden>false</IsHidden>
    </Settings>
    <Settings xsi:type="FileModel">
      <Name>FileTwo</Name>
      <IsActive>true</IsActive>
      <IsHidden>false</IsHidden>
    </Settings> 
   <Settings xsi:type="ServerModel">
      <Name>DelRep</Name>
      <IsActive>false</IsActive>
      <IsHidden>false</IsHidden>
    </Settings>
  </Items>
  <DirectoryPath>D:\MainFolder</DirectoryPath>
</MainClass>

Я извлекаю некоторые данные, используя следующий код,

XDocument File = XDocument.Load(path);
XElement element = File .Root.Elements().Single(x => x.Name == "DirectoryPath");
string usingPath = element.Value;

Я пытался добавить определенную проверку вприведенный выше код такой, что даже в ситуации, когда в XML-файле отсутствует деталь <DirectoryPath>D:\MainFolder</DirectoryPath>, я не получил бы ошибку " последовательность не содержит соответствующий элемент ".

Есть лиСвойство Аналогично может быть Path.Exist в C # для проверки наличия элемента XML

Ответы [ 3 ]

0 голосов
/ 23 сентября 2019

Вы можете использовать SingleOrDefault , который возвращает значение по умолчанию, если элемент не найден

XElement element = File .Root.Elements().SingleOrDefault(x => x.Name == "DirectoryPath");
if(element != null)
{
    string usingPath = element.Value;
}
0 голосов
/ 23 сентября 2019

Не существует метода по умолчанию для проверки того, существует ли данный узел или нет. Но мы можем использовать методы расширения для достижения того же.

public static class XElementExtension
{
    public static bool HasElement(this XElement xElement, string elementName)
    {
        return xElement.Elements(elementName).Any();
    }        
}

// Main
var xmlDocument = XElement.Load(@"TestFile.xml", LoadOptions.None); 
string elementName = "DirectoryPath";
bool hasElement = xmlDocument.HasElement(elementName);
if(hasElement)
{
    Console.WriteLine(xmlDocument.Elements(elementName).First().Value);
}
0 голосов
/ 23 сентября 2019

Использование: SignleOrDefault.Тогда вы получите правильный XElement или ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...