【问题标题】:Undefined result when parse xml to json with xml2js node js使用 xml2js 节点 js 将 xml 解析为 json 时未定义的结果
【发布时间】:2018-02-23 18:14:49
【问题描述】:

我在使用xml2js 将 XML 解析为 JSON 时遇到问题。这是我的 xml。

<Tables>
<Table>
    <Id>TABLE1</Id>
    <Description>Test 1</Description>
    <FullName>TEST.CHEM.Customer</FullName>
    <Columns>
    <Column>
        <Id>1</Id>
        <Name>CustomerId</Name>
        <DataType>Number</DataType>
    </Column>
    <Column>
        <Id>2</Id>
        <Name>CustomerName</Name>
        <DataType>String</DataType>
    </Column>
    <Column>
        <Id>2</Id>
        <Name>ValidFrom</Name>
        <DataType>Date</DataType>
    </Column>
    </Columns>
</Table></Tables>

这是我的主要内容。我关注该库中的 sn-p figuredOutXML (input: xmlfile.parseString, output: data)

apiRoutes.get('/test', function(req, res) {
res.set('Content-Type', 'application/json');

figuredOutXML(function(err,data,data2){
    if(err){
        console.log("Error!");
        console.error(err.message);
    }else{
        var tableId = util.inspect(data2.Tables.Table.Id, false, null);
        res.status(200).send(JSON.stringify({
        INFO: 'SUCCESS',
        TABLE: tableId}));
    }

});

但我得到了tableId 的未定义结果。是xml有问题还是函数有问题?

【问题讨论】:

    标签: javascript json node.js xml xml2js


    【解决方案1】:

    您可以尝试使用另一个包camaro 来简单轻松地更改所需的结果。

    例子:

    const xml = '<Tables>
    <Table>
        <Id>TABLE1</Id>
        <Description>Test 1</Description>
        <FullName>TEST.CHEM.Customer</FullName>
        <Columns>
        <Column>
            <Id>1</Id>
            <Name>CustomerId</Name>
            <DataType>Number</DataType>
        </Column>
        <Column>
            <Id>2</Id>
            <Name>CustomerName</Name>
            <DataType>String</DataType>
        </Column>
        <Column>
            <Id>2</Id>
            <Name>ValidFrom</Name>
            <DataType>Date</DataType>
        </Column>
        </Columns>
    </Table></Tables>'
    
    const temp = {
        table_id: 'Tables/Table/Id'
        columns: ['/Tables/Table/Columns/Column', {
            column_id: 'Id',
            name: 'Name'
        }]
    }
    
    const transform = require('camaro')
    const results = transform(xml, temp)
    
    console.log(JSON.stringify(results, null, 2))
    

    结果

    {
        "columns": [
            {
            "column_id": "1",
            "name": "CustomerId"
            },
            {
            "column_id": "2",
            "name": "CustomerName"
            },
            {
            "column_id": "2",
            "name": "ValidFrom"
            }
        ],
        "table_id": "TABLE1"
    }
    

    【讨论】:

    • 比我之前的回答方便,是不是camaro的制造者?顺便说一句,非常感谢@anh-thang-bui
    • 我不是,制造商是我的朋友
    【解决方案2】:

    这是粗心,它总是会出现未定义的结果,因为var tableId 是字符串格式而不是 JSON 格式请参阅here,所以当 xml2js 解析器已经解析了 xml 时,它已经是 json 格式。您可以根据上面的xml文件通过result.Databases.Tables[0].Table[0].FullName访问它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-09
      • 2019-10-24
      • 2017-11-15
      • 2015-04-25
      • 1970-01-01
      • 2019-03-15
      • 2014-08-30
      • 1970-01-01
      相关资源
      最近更新 更多