2009-05-12 2 views
2

구문 분석해야하는 html 문서 집합이 있습니다. 그들은 Latin1Encoded로 인코딩됩니다. "파싱"을 위해 HtmlAgiliy 팩을 사용하고 있습니다.Lating1Encoded 문서를 구문 분석 할 때 Xpath의 C# : "Swedish"문자

문서와 인코딩 사이에 서로 다른 인코딩으로 인해 작동하지 못하는 Xpath 쿼리 (스웨덴 문자 포함)가 XPath 쿼리를 저장합니다.

XPath 쿼리 :

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

는 XPath 쿼리는 파이어 폭스 확장 XPath는 검사기에서 잘 작동합니다.

+0

구문 분석하려는 데이터는 어떻게 보이나요? –

+0

나는 "마법"의 사건을 겪었습니다. 갑작스럽게 일하기 시작했습니다. 그것은 위대하고 자극적이었습니다 ... 나는 VS가 필요할 때 처음에 UTF8에 저장하기 시작한다는 것을 읽었습니다. –

+0

C#의 문자열은 항상 런타임시 유니 코드이므로 (http://www.yoda.arachsys.com/csharp/strings.html) 소스 파일을 저장하는 형식은 중요하지 않습니다. 입력 XML. 서가 올 Y 르게로드 된 경우 XPath 표현식과 XML은 모두 유니 코드로 내부적으로 인코딩됩니다. –

답변

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

관련 문제