元素的 select 字符串值的 XPath 但 <br/> 替换为换行符?
XPath to select string value of element but with <br/> replaced with newline?
是否可以在 html 上调用 xpath normalize-space()
并将 <br>
、<br/>
显示为新行? XPath 版本为 1.0
我们解析来自网站的文章。真实 HTML 代码示例:
<div id="someid">
<img src="https://habrastorage.org/webt/ej/ye/hp/ejyehp08ercmqzlhzh3um6mtukm.jpeg"><br>
<br>
Организовать удаленный доступ для сотрудников — задача прикладная. Решений на рынке немало, при этом, и подводных камней достаточно. Под катом рассказ о нашем «чемодане», который раскладывается быстро и удобно за 30 минут. Просьба не воспринимать это как рекламный BS, поскольку внутри реальная инструкция по применению.<a name="habracut"></a><br>
<br>
<a href="https://www.parallels.com/ru/products/ras/remote-application-server/">Parallels Remote Application Server</a> (RAS) — это комплексное средство для доставки виртуальных приложений и рабочих столов, позволяющее работать с приложениями и данными с любого устройства, в том числе мобильного. Мы понимаем, что такие решения хочется сначала протестировать в конкретных условиях, прежде чем принимать решение о покупке. <br>
<br>
</div>
从站点提取文本时没有问题。问题是 normalize-space
删除了所有包含 <br>
的标签。结果我们有一个长文本行。我需要带中断的文本行。
预期结果:
Организовать удаленный доступ для сотрудников — задача прикладная. Решений на рынке немало, при этом, и подводных камней достаточно. Под катом рассказ о нашем «чемодане», который раскладывается быстро и удобно за 30 минут. Просьба не воспринимать это как рекламный BS, поскольку внутри реальная инструкция по применению.
Parallels Remote Application Server(RAS) — это комплексное средство для доставки виртуальных приложений и рабочих столов, позволяющее работать с приложениями и данными с любого устройства, в том числе мобильного. Мы понимаем, что такие решения хочется сначала протестировать в конкретных условиях, прежде чем принимать решение о покупке.
这个 XPath 2.0 表达式,
string-join(
for $n in (//div[@id="someid"]//node()[self::br or self::text()])
return if (name($n)='br')
then codepoints-to-string(10)
else $n, '')
将加入目标 div
的所有文本节点后代的字符串,用换行符替换所有 br
元素。
不幸的是,我没有用 xpath 解决这个问题。此方案适用于python(scrapy框架),其他语言算法相同
parsed_text = remove_tags(response.xpath(record['xpath_text']).extract_first())
text = re.sub(r'\n\s*\n', '\n\n' , parsed_text).strip()
是否可以在 html 上调用 xpath normalize-space()
并将 <br>
、<br/>
显示为新行? XPath 版本为 1.0
我们解析来自网站的文章。真实 HTML 代码示例:
<div id="someid">
<img src="https://habrastorage.org/webt/ej/ye/hp/ejyehp08ercmqzlhzh3um6mtukm.jpeg"><br>
<br>
Организовать удаленный доступ для сотрудников — задача прикладная. Решений на рынке немало, при этом, и подводных камней достаточно. Под катом рассказ о нашем «чемодане», который раскладывается быстро и удобно за 30 минут. Просьба не воспринимать это как рекламный BS, поскольку внутри реальная инструкция по применению.<a name="habracut"></a><br>
<br>
<a href="https://www.parallels.com/ru/products/ras/remote-application-server/">Parallels Remote Application Server</a> (RAS) — это комплексное средство для доставки виртуальных приложений и рабочих столов, позволяющее работать с приложениями и данными с любого устройства, в том числе мобильного. Мы понимаем, что такие решения хочется сначала протестировать в конкретных условиях, прежде чем принимать решение о покупке. <br>
<br>
</div>
从站点提取文本时没有问题。问题是 normalize-space
删除了所有包含 <br>
的标签。结果我们有一个长文本行。我需要带中断的文本行。
预期结果:
Организовать удаленный доступ для сотрудников — задача прикладная. Решений на рынке немало, при этом, и подводных камней достаточно. Под катом рассказ о нашем «чемодане», который раскладывается быстро и удобно за 30 минут. Просьба не воспринимать это как рекламный BS, поскольку внутри реальная инструкция по применению.
Parallels Remote Application Server(RAS) — это комплексное средство для доставки виртуальных приложений и рабочих столов, позволяющее работать с приложениями и данными с любого устройства, в том числе мобильного. Мы понимаем, что такие решения хочется сначала протестировать в конкретных условиях, прежде чем принимать решение о покупке.
这个 XPath 2.0 表达式,
string-join(
for $n in (//div[@id="someid"]//node()[self::br or self::text()])
return if (name($n)='br')
then codepoints-to-string(10)
else $n, '')
将加入目标 div
的所有文本节点后代的字符串,用换行符替换所有 br
元素。
不幸的是,我没有用 xpath 解决这个问题。此方案适用于python(scrapy框架),其他语言算法相同
parsed_text = remove_tags(response.xpath(record['xpath_text']).extract_first())
text = re.sub(r'\n\s*\n', '\n\n' , parsed_text).strip()