2009-05-12 1 views
2

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

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

Xpath запрос:

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

XPath запрос отлично работает в Firefox расширение XPATH проверки.

+0

Как выглядят данные, которые вы хотите разборки? –

+0

У меня был случай с «волшебством», он внезапно начал работать, что одновременно и здорово, и раздражает ... Я где-то читал, что В.С. начинает хранить в UTF8 сначала, когда это необходимо? –

+0

Формат VS хранит ваш исходный файл, не имеет значения, потому что строки в C# всегда находятся в Unicode во время выполнения (http://www.yoda.arachsys.com/csharp/strings.html). Если ваш исходный XML-документ загружен правильно, то и выражение XPath, и XML находятся в кодировке Unicode внутри. –

ответ

3

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

+0

+1 Я тоже думал о «normalize-space()». – Tomalak

Смежные вопросы