XPath:通过规范化空间弥补丢失的空白
我目前正在进行一个项目,需要使用XPath提取一些地址。下面的XPath返回由于使用规范化空间而在一个节点中需要的所有文本。如果我删除normalize空格,那么所需的文本将在3个不同的节点中返回,分别是地址、城市和邮政编码以及国家。使用normalize space将所有3个节点合并为一个节点,但会弄乱地址的空白,如下所示 XPath 返回XPath:通过规范化空间弥补丢失的空白,xpath,Xpath,我目前正在进行一个项目,需要使用XPath提取一些地址。下面的XPath返回由于使用规范化空间而在一个节点中需要的所有文本。如果我删除normalize空格,那么所需的文本将在3个不同的节点中返回,分别是地址、城市和邮政编码以及国家。使用normalize space将所有3个节点合并为一个节点,但会弄乱地址的空白,如下所示 XPath 返回 22-13 20 St., 3nd Fl., FrontStaten Island City, New York 12101United States
22-13 20 St., 3nd Fl., FrontStaten Island City, New York 12101United States
期望输出
22-13 20 St., 3nd Fl., Front, Staten Island City, New York 12101, United States
HTML
我很感激任何关于如何达到预期产出的建议
非常感谢 使用
从您的其他问题来看,我想您只能使用XPath1.0,其中dikk的答案对字符串连接没有帮助。。。很方便,但只能从XPath2.0开始使用 在XPath 1.0中,必须使用concat…,它只能连接固定数量的节点。如果行数始终相同,则可以
concat(
normalize-space(//td[2]/text()[1]), ', ',
normalize-space(//td[2]/text()[2]), ',',
normalize-space(//td[2]/text()[3])
)
不可能加入不同数量的文本节点。如果行数不同,但保持小于某个大小,则可以使用此相当肮脏的方法:
substring-before(concat(
normalize-space(//td[2]/text()[1]), ', ',
normalize-space(//td[2]/text()[2]), ', ',
normalize-space(//td[2]/text()[3]), ', ',
normalize-space(//td[2]/text()[4]), ', ', ', '
), ', , ')
并根据需要扩展模式
如果文本节点不存在,那么将在输出中返回一个空字符串,从而获得。通过在末尾添加此模式并从它开始剪切所有内容,可以解决缺少的字符串连接。。。如果您知道要加入的项数的上限,但查询会变得非常臃肿。也许在XPath之外进行连接是一个更好的主意
normalize-space(string-join((//table/tr/td[@class='shaded']/table[@cellspacing='10']/tr[2]/td[2]/text()), ','))
concat(
normalize-space(//td[2]/text()[1]), ', ',
normalize-space(//td[2]/text()[2]), ',',
normalize-space(//td[2]/text()[3])
)
substring-before(concat(
normalize-space(//td[2]/text()[1]), ', ',
normalize-space(//td[2]/text()[2]), ', ',
normalize-space(//td[2]/text()[3]), ', ',
normalize-space(//td[2]/text()[4]), ', ', ', '
), ', , ')