【问题标题】:How to get the text from XML with position in the XML file?如何从 XML 中获取具有 XML 文件中位置的文本?
【发布时间】:2010-12-27 23:15:51
【问题描述】:

我想解析 HTML(您可以假设为 XML,通过 Tidy 转换)并获取所有文本节点(这意味着 Body 标记中可见的节点)及其在 XML 文件中的位置。位置表示平面 XML 文件中的文本位置。

【问题讨论】:

    标签: c# xml html-parsing


    【解决方案1】:

    XmlTextReader 实现 IXmlLineInfo - 如果您查看 IXmlLineInfo 的文档,它提供了一个读取 XML 文件并报告每个节点位置的示例。

    编辑:对于那些说它无关紧要的人,它可能与 XML 无关——但很可能与人类无关。如果您试图告诉人们在 XML 中查找特定位的位置,报告行号和位置会非常有帮助。

    【讨论】:

    • 这很好,但会解决问题,我不想要行号和行位置,我正在寻找 XML 文件中的确切字符位置,不确定这是否可以得到位置。
    • @Priyank:不,我不确定你能做到,恐怕。
    • 您可以通过将文件加载为文本(使用 XmlTextReader.Encoding 解码)并计算换行符,从行+列恢复到字符偏移。
    【解决方案2】:

    用于读取 XML 的 SAX 规范(几乎所有 XML 工具都实现)提供了一个带有定位器的 ContentHandler,它允许您获取行号和字符(列)号。

    int     getColumnNumber()
              Return the column number where the current document event ends.
     int    getLineNumber()
              Return the line number where the current document event ends.
    

    (我错过了对C#的要求。上面的例子是针对Java的,但我会尝试找到对应的C#接口)。

    事件可以是一串字符。

    .NET 的 SAX 描述如下: http://saxdotnet.sourceforge.net/

    【讨论】:

      【解决方案3】:

      您不应该依赖 XML 文件中的文本位置(任何理智的解析器都会完全忽略空格)。您可以(并且应该)做的是使用XPath 来识别您感兴趣的节点,然后从这些节点中取出文本。如果您只对文本节点感兴趣,那么查询“//text()”将获取所有文本节点。

      【讨论】:

      • 问题不在于提取文本节点,我无论如何都可以更轻松地完成。 HTML 浏览器具有 InnerText 属性。我不想高速修改文本位置,XML解析器做不到我想要的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      相关资源
      最近更新 更多