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

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

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

XPath-запрос:

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

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


person Niels Bosma    schedule 12.05.2009    source источник
comment
Как выглядят данные, которые вы хотите проанализировать?   -  person Fredrik Mörk    schedule 12.05.2009
comment
У меня был случай волшебства, он внезапно начал работать, что одновременно здорово и раздражает .... Я где-то читал, что VS сначала начинает хранить в UTF8, когда это необходимо?   -  person Niels Bosma    schedule 12.05.2009
comment
Формат, в котором VS хранит ваш исходный файл, не имеет значения, потому что строки в C# всегда находятся в Unicode во время выполнения (yoda.arachsys.com/csharp/strings.html). Если ваш входной XML-документ был загружен правильно, то и выражение XPath, и XML имеют внутреннюю кодировку Unicode.   -  person Dirk Vollmar    schedule 12.05.2009


Ответы (1)


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

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

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

С#

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' (просто чтобы исключить случай, когда есть дополнительные начальные или конечные пробелы)?

person Dirk Vollmar    schedule 12.05.2009