Я хочу проанализировать html-страницу, чтобы получить некоторые данные. Сначала я конвертирую его в XML-документ с помощью SgmlReader . Затем я загружаю результат в XMLDocument и затем просматриваю XPath:
//contains html document
var loadedFile = LoadWebPage();
...
Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
sgmlReader.DocType = "HTML";
sgmlReader.WhitespaceHandling = WhitespaceHandling.All;
sgmlReader.CaseFolding = Sgml.CaseFolding.ToLower;
sgmlReader.InputStream = new StringReader(loadedFile);
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.XmlResolver = null;
doc.Load(sgmlReader);
Этот код отлично работает в большинстве случаев, кроме этого сайта - www.arrow.com (попробуйте найти что-то вроде OP295GS). Я могу получить таблицу с результатом, используя следующий XPath:
var node = doc.SelectSingleNode(".//*[@id='results-table']");
Это дает мне узел с несколькими дочерними узлами:
[0] {Element, Name="thead"}
[1] {Element, Name="tbody"}
[2] {Element, Name="tbody"}
FirstChild {Element, Name="thead"}
Хорошо, давайте попробуем получить некоторые дочерние узлы с помощью XPath. Но это не работает:
var childNodes = node.SelectNodes("tbody");
//childnodes.Count = 0
Это также:
var childNode = node.SelectSingleNode("thead");
// childNode = null
И даже такое:
var childNode = doc.SelectSingleNode(".//*[@id='results-table']/thead")
Что может быть не так в запросах Xpath?
Я только что попытался разобрать эту HTML-страницу с помощью Html Agility Pack , и мои запросы XPath работают хорошо. Но мое приложение использует внутри XmlDocument, Html Agility Pack мне не подходит.
Я даже попробовал следующий трюк с Html Agility Pack , но запросы Xpath также не работают :
//let's parse and convert HTML document using HTML Agility Pack and then load
//the result to XmlDocument
HtmlDocument xmlDocument = new HtmlDocument();
xmlDocument.OptionOutputAsXml = true;
xmlDocument.Load(new StringReader(webPage));
XmlDocument document = new XmlDocument();
document.LoadXml(xmlDocument.DocumentNode.InnerHtml);
Возможно, var line = "drwxr -...
Приведенный ниже фрагмент определяет из списка файлов, которые из них являются каталогом на FTP
, поскольку C # это будет, как показано ниже
var files = new List(){"App_Data", "bin", "Content"};
var line = "drwxr-xr-x 1 ftp ftp 0 Mar 18 22:41 App_Data"
var dir = files.First(x => line.EndsWith(x));
Как я могу преобразовать последнюю строку в PowerShell?