从 XML(或 HTML)读取未标记的文本
Posted
技术标签:
【中文标题】从 XML(或 HTML)读取未标记的文本【英文标题】:Read untagged text from XML (or HTML) 【发布时间】:2022-01-23 23:38:49 【问题描述】:我有一个包含许多这样的条目的 XML 文件:
<query id='LoadRights'>
<description>Load all user-rights</description>
SELECT CODE FROM RIGHTS
</query>
使用 id,我只想读取未标记的行“SELECT CODE FROM RIGHTS”。有没有使用 jQuery 的优雅方法?
我在 Nodejs 应用程序中使用 Cheerio,但它基于 jQuery。提前致谢
【问题讨论】:
如果您使用的是节点,那么读取 XML 的方法比使用 jQuery 更好:***.com/questions/32873100/… 【参考方案1】:您可以为此使用 camaro。请注意,我在这里使用normalize-space()
,因为我想修剪文本前后的换行符。如果您想要原始文本,请将其删除。
const transform = require('camaro')
async function main()
const xml = `
<query id='LoadRights'>
<description>Load all user-rights</description>
SELECT CODE FROM RIGHTS
</query>`
template =
text: 'normalize-space(query/text())'
const output = await transform(xml, template)
console.log(output);
main()
输出
text: 'SELECT CODE FROM RIGHTS'
如果您有多个查询,它将如下所示
const transform = require('camaro')
async function main()
const xml = `
<queries>
<query id='LoadRights'>
<description>Load all user-rights</description>
SELECT CODE FROM RIGHTS
</query>
<query id='LoadRights'>
<description>Load all user-rights</description>
SELECT CODE FROM RIGHTS 2
</query>
<query id='LoadRights'>
<description>Load all user-rights</description>
SELECT CODE FROM RIGHTS 3
</query>
</queries>`
template =
queries: ['queries/query', 'normalize-space(text())']
const output = await transform(xml, template)
console.log(output);
main()
输出将是
queries: [
'SELECT CODE FROM RIGHTS',
'SELECT CODE FROM RIGHTS 2',
'SELECT CODE FROM RIGHTS 3'
]
【讨论】:
【参考方案2】:这是一种方法,基本上是使用隐藏的实用程序 html 元素和一些 jquery 方法来清除任何“标记”的内容
const getText = el =>
$('#copy').html($(`$el`).html());
$('#copy *').each(function()
$(this).text('')
)
return $('#copy').text().trim()
;
console.log(getText('#LoadRights'))
#copy
display: none;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<query id='LoadRights'>
<description>Load all user-rights</description>
SELECT CODE FROM RIGHTS
</query>
<div id="copy"></div>
【讨论】:
以上是关于从 XML(或 HTML)读取未标记的文本的主要内容,如果未能解决你的问题,请参考以下文章