Извлечение элемента XML от XML-файла с помощью XPath

Dispose должен быть разработан, чтобы сделать его цель, расположив объект. Эта задача безопасна и не выдает исключения большую часть времени . Если Вы видите, что себя выдаете исключения от Dispose, необходимо, вероятно, думать дважды, чтобы видеть, делаете ли Вы слишком много материала в нем. Около этого я думаю Dispose, должен рассматриваться как все другие методы: обработайте, если можно сделать что-то с ним, позвольте ему пузырь, если Вы не можете.

РЕДАКТИРОВАНИЕ: Для указанного примера я написал бы код так, чтобы мой код не вызывал исключение, но очистка TcpClient могла бы вызвать исключение, которое должно быть допустимым, чтобы распространить , по-моему (или обработать и повторно бросить как более универсальное исключение, точно так же, как любой метод):

public void Dispose() { 
   if (tcpClient != null)
     tcpClient.Close();
}

Однако точно так же, как любой метод, если Вы знаете tcpClient.Close(), мог бы выдать исключение, которое должно быть проигнорировано (не имеет значения), или должен быть представлен другим объектом исключения, Вы могли бы хотеть поймать его.

7
задан DavidRR 16 July 2014 в 12:01
поделиться

3 ответа

Использовать XmlDocument.SelectSingleNode .

] Пример:

XmlDocument doc = new XmlDocument();
doc.Load("yourXmlFileName");
XmlNode node = doc.SelectSingleNode("yourXpath");

Затем вы можете получить доступ к node.ChildNodes , чтобы получить нужные значения (пример):

string extension = node.ChildNodes[0].InnerText;
string value = node.ChildNodes[1].InnerText;

И затем использовать эти значения при создании вашего объекта MimeType.

Изменить: Некоторая информация по XPath.
Есть несколько действительно хороших руководств по XPath, попробуйте здесь и здесь . Рекомендация W3C сама по себе может быть немного подавляющей.
В вашем примере вы можете попробовать использовать следующий XPath для выбора первого узла MimeType в документе (где root - это любое имя вашего корневого элемента):

string xPath = "root/MimeType[1]"

Надеюсь, что помогает!

14
ответ дан 6 December 2019 в 10:52
поделиться

Следующий метод должен обеспечить основу для получения MIME-типа здесь

public MimeType RunXPath(string mimeType)
{
  XmlNode node = _xmlDoc.SelectSingleNode(
    string.Format("//MimeType/Extension[text()="{0}"]/ancestor::MimeType", mimeType));
  foreach(XmlNode node in nodes)
  {
    // Extract the relevant nodes and populate the Mime Type here...
  }

  return ...
}

Уловка состоит в том, чтобы найти MimeType на основе текста в расширении, а затем получить предка MimeType для этого совпадения.

2
ответ дан 6 December 2019 в 10:52
поделиться

Вы используете классы в пространстве имен System.Xml.XPath .

Учебники из MSDN

1
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: