【问题标题】:Read untagged text from XML (or HTML)从 XML(或 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。提前致谢

【问题讨论】:

标签: jquery node.js xml cheerio


【解决方案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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      相关资源
      最近更新 更多