C#: "шведские" символы в Xpath при разборе документов Lating1Encoded

У меня есть набор HTML-документов, которые мне нужно проанализировать. Они закодированы в Latin1Encoded. Я использую HtmlAgiliy pack для "разбора".

У меня есть запрос Xpath (со шведскими символами), который я не могу заставить работать из-за различных кодировок между документами и VS кодирования, хранящий запрос XPath в??

Запрос Xpath:

doc.DocumentNode.SelectNodes(@"//h2[text()='Företag']/../div//span[text()='Resultat:']/../div");

Запрос xpath отлично работает в контроллере расширения Firefox xpath.

1 ответ

Решение

Не могли бы вы предоставить больше примеров кода и некоторый входной XML-документ? На основании предоставленной информации я написал небольшую примерную программу, которая работает как положено. Работает ли у вас следующее?

Образец документа:

<?xml version="1.0" encoding="iso-8859-1"?>
<doc>
  <test>Företag</test>
  <test>Hallå</test>
</doc>

C#

using System;
using System.Xml.XPath;

class Program
{
    static void Main(string[] args)
    {
        XPathDocument xpdoc = new XPathDocument(@"sample.xml");
        XPathNavigator nav = xpdoc.CreateNavigator();
        XPathNodeIterator iter = nav.Select("//*[text() = 'Företag']");

        while (iter.MoveNext())
        {
            Console.WriteLine(iter.Current.ToString());
        }
    }
}

Выход

Företag

Из приведенного примера кода кажется, что вы используете Microsoft.Windows.Design.Documents.Trees.DocumentNode учебный класс. Однако в документации говорится, что этот класс не предназначен для непосредственного использования. Могу ли я спросить, что вы пытаетесь сделать?

Обновление: возможно, вы столкнулись с проблемой нормализации пробелов (что может быть сделано вашей надстройкой FireFox, а не в вашем коде). Вы пытались изменить свой XPath, заменив тест text() = 'Företag' от normalize-space() = 'Företag' (Просто чтобы исключить случай, когда есть дополнительный начальный или конечный пробел)?

Другие вопросы по тегам