2009-05-12 5 views
2

J'ai un ensemble de documents html dont j'ai besoin pour analyser. Ils sont encodés en Latin1Encoded. J'utilise HtmlAgiliy pack pour "l'analyse".C#: caractères "suédois" dans Xpath lors de l'analyse des documents Lating1Encoded

J'ai une requête Xpath (avec des caractères suédois) que je n'arrive pas à travailler à cause des différents encodages entre les docs et l'encodage VS stocke la requête XPath dans ??

requête XPath:

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

La requête XPath fonctionne très bien dans l'extension Firefox XPath vérificateur.

+0

À quoi ressemblent les données que vous voulez analyser? –

+0

J'ai eu un cas de "magie", Il a soudainement commencé à travailler, ce qui est à la fois génial et irritant .... J'ai lu quelque part que VS commence à stocker en UTF8 d'abord en cas de besoin? –

+0

Le format VS stocke votre fichier source ne devrait pas importer parce que les chaînes dans le C# sont toujours en Unicode à l'exécution (http://www.yoda.arachsys.com/csharp/strings.html). Si votre document XML d'entrée a été chargé correctement, l'expression XPath et XML sont codés en Unicode en interne. –

Répondre

3

Pourriez-vous fournir plus de code d'exemple et un document XML d'entrée? De l'information donnée, j'ai écrit un petit exemple de programme qui fonctionne comme prévu. Est-ce que ce qui suit fonctionne pour vous?

Exemple de document:

<?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()); 
     } 
    } 
} 

Sortie

Företag 

A partir de l'exemple de code étant donné qu'il semble que vous utilisez la classe Microsoft.Windows.Design.Documents.Trees.DocumentNode. Cependant, la documentation indique que cette classe n'est pas destinée à être utilisée directement. Puis-je vous demander ce que vous essayez de faire? Mise à jour: Il se peut que vous soyez confronté à un problème avec la normalisation des espaces (ce qui pourrait être fait par votre complément FireFox et non dans votre code). Avez-vous essayé de changer votre XPath en remplaçant le test text() = 'Företag' par normalize-space() = 'Företag' (Juste pour exclure le cas où il y a des espaces supplémentaires de début ou de fin)?

+0

+1 Je pensais aussi à "normalize-space()". – Tomalak

Questions connexes