【问题标题】:C#: "Swedish" characters in Xpath when parsing Lating1Encoded docsC#:解析 Lating1Encoded 文档时 Xpath 中的“瑞典语”字符
【发布时间】:2010-10-25 11:48:38
【问题描述】:

我有一组需要解析的 html 文档。它们以 Latin1Encoded 编码。我正在使用 HtmlAgiliy 包进行“解析”。

我有一个 Xpath 查询(带有瑞典字符),由于文档和编码 VS 将 XPath 查询存储在其中的不同编码,我无法开始工作??

Xpath 查询:

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

xpath 查询在 Firefox 扩展 xpath 检查器中运行良好。

【问题讨论】:

  • 你要解析的数据长什么样子?
  • 我遇到了一个“神奇”的案例,它突然开始起作用了,这既好又烦人....我在某个地方读到 VS 在需要时首先开始以 UTF8 存储?
  • VS 存储源文件的格式无关紧要,因为 C# 中的字符串在运行时始终采用 Unicode (yoda.arachsys.com/csharp/strings.html)。如果您的输入 XML 文档已正确加载,则 XPath 表达式和 XML 在内部都采用 Unicode 编码。

标签: c# xpath latin1 file-encodings


【解决方案1】:

您能否提供更多示例代码和一些输入 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(只是为了排除存在额外前导或尾随空格的情况)?

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 2012-08-13
    • 2012-02-04
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    相关资源
    最近更新 更多