从 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)读取未标记的文本的主要内容,如果未能解决你的问题,请参考以下文章

R语言XML文件

C#读取并写入XML文件

python专题-读取xml文件

Unity中实现读取XML文件

如何从文本框中读取文本并将其中的一些链接?

在 Android java 中读取文本文件或 XML 文件