8

我是 XPath 的新手。我正在尝试使用 XPath 解析页面。我需要从标签中获取信息,但标题中的转义撇号搞砸了一切。

对于解析,我使用Grab

来源标签:

<img src='somelink' border='0' alt='commission:Alfred\'s misadventures' title='commission:Alfred\'s misadventures'>

实际 XPath:

g.xpath('.//tr/td/a[3]/img').get('title')

退货

commission:Alfred\\

有没有什么办法解决这一问题?

谢谢

4

2 回答 2

5

垃圾进垃圾出。您的输入格式不正确,因为它不正确地转义了单引号字符。许多编程语言(包括 Python)使用反斜杠字符来转义字符串文字中的引号。XML 没有。您应该 1) 用双引号将属性值括起来;或 2)用于&apos;包含单引号

XML 规范

为了允许属性值同时包含单引号和双引号,撇号或单引号字符 (') 可以表示为 " &apos;",双引号字符 (") 表示为 " &quot;"。

于 2011-12-10T21:14:03.417 回答
2

由于嵌套的撇号,提供的“XML”不是格式良好的文档,因此无法在其上评估 XPath 表达式

提供的格式不正确的文本可以更正为:

<img src="somelink"
 border="0"
 alt="commission:Alfred's misadventures"
 title="commission:Alfred's misadventures"/>

如果有一个奇怪的要求不使用引号,那么一个正确的转换是

<img src='somelink'
 border='0'
 alt='commission:Alfred&apos;s misadventures'
 title='commission:Alfred&apos;s misadventures'/>

如果为您提供了不正确的输入,在诸如 C# 之类的语言中,可以尝试使用以下方法将其转换为正确的对应项

string correctXml = input.replace("\\'s", "&apos;s")

在 Python 中可能有类似的方法可以做同样的事情。

于 2011-12-10T23:56:49.263 回答