C #: "шведские" символы в Xpath при разборе документов Lating1Encoded - PullRequest
2 голосов
/ 12 мая 2009

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

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

Запрос Xpath:

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

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

1 Ответ

3 голосов
/ 12 мая 2009

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

...