2009-05-12 10 views
2

私は解析する必要がある一連のhtmlドキュメントを持っています。それらはLatin1Encodedでエンコードされています。私は "解析"のためにHtmlAgiliyパックを使用しています。C#:Lating1Encodedドキュメントを解析するときにXpathの "Swedish"文字

ドキュメントとエンコーディングの異なるエンコーディングのために動作できないXpathクエリ(スウェーデン語の文字)があります。

XPathクエリ:

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

のXPathクエリはFirefoxの拡張XPathのチェッカーで正常に動作します。

+0

解析するデータはどのように見えますか? –

+0

私は "魔法"の事件を経験しました。突然、うまく始まりました。これは偉大で刺激的です。私はVSが最初に必要なときにUTF8で保存し始めるところを読んでいますか? –

+0

C#の文字列は常に実行時にUnicode(http://www.yoda.arachsys.com/csharp/strings.html)なので、フォーマットVSはソースファイルを保存します。入力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アドインではなく、コード内で行われる可能性があります)。テストtext() = 'Företag'normalize-space() = 'Företag'に置き換えてXPathを変更しようとしましたか?(追加の先頭または末尾の空白がある場合を除外するために)

+0

+1「normalize-space()」も考えていました。 – Tomalak