使用xml2js节点js解析xml到json时的未定义结果

时间:2017-09-14 16:50:58

标签: javascript json node.js xml xml2js

使用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>

这是我的主要人物。我从该库中关注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或函数有问题吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以尝试使用其他包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"
}