0

答えを検索してみましたが、XMLBUILDER に関する限られた数の質問が見つかりませんでした。したがって、重複が見つかった場合は本当に申し訳ありませんが、質問を投稿してください。

XMLBUILDERプロジェクトの XML を作成するために Node.js モジュールを使用しています。私は XML を作成する関数を持っていますが、何らかの理由により、root要素は常に以前の値を格納しているため、XML に以前の値が追加されるたびに 2 回取得します。

XML を作成する Node.js コントローラーは次のとおりです。

var root    =   builder.create('Header')
                    root.att(currentTime)

exports.createXMLData   =   function(Query,callback){
    var input           =   Query.input;    
    var OuterTag        =   root.ele(input.Type)
    
    //Add the time to XML 
    OuterTag.ele('time', input.EventTime).up()
    
    //Add the reason to the XML
    OuterTag.ele('reason',input.ErrorReason)
    
    //Like this I have many more tags
    
    xml = root.end({ pretty: true});
    callback(xml);
}

一連の値を持つ配列があり、すべての値を追加する単一の XML を作成する必要があるrootため、ヘッダーを毎回追加したくないので外側に配置します。配列内のすべての要素に対して、関数を呼び出してcreateXMLData、必要な XML を作成し、自分自身を XML に追加できるようにしますが、この関数を呼び出すたびに、以前の値が追跡され、新しい値が取得されます。過去価値。

例:配列に2つの要素があり、送信ボタンをクリックしてXMLを作成すると、最初は2つの要素でXMLが正しく作成されますが、もう一度クリックすると、以前の値とともにXMLが再度作成されるので、 4 つの要素を取得します。

関数内にrootタグを配置すると、配列内の要素ごとにヘッダーが2回取得されますが、これは望ましくありません。XML全体に対してヘッダーを1つだけにしたい。関数内でを使用してルート要素を空にしようとしましたroot = ""が、エラーがスローされます。

私が見逃しているのは小さなことだと確信していますが、それを理解することはできません。誰かがこれで私を助けてくれますか?

したがって、初めて作成すると、次のような XML が得られます。

<?xml version="1.0"?>
<header>
    <time> 2020-08-20T09:35:25+02:00 </time>
    <reason> dummyReason </reason>
    
    <time> 2020-08-20T09:35:30+02:00 </time>
    <reason> dummyReason </reason>
</header>

[送信] ボタンをクリックして再度作成すると、次のようになります。

<?xml version="1.0"?>
<header>
    <time> 2020-08-20T09:35:25+02:00 </time>
    <reason> dummyReason </reason>
    
    <time> 2020-08-20T09:35:30+02:00 </time>
    <reason> dummyReason </reason>
    
    <time> 2020-08-20T09:36:25+02:00 </time>
    <reason> dummyReason </reason>
    
    <time> 2020-08-20T09:36:30+02:00 </time>
    <reason> dummyReason </reason>
</header>

配列要素を呼び出すたびに要素を追加するわけではないことに注意してください。rootこれは、要素によって自動的に行われます。

4

1 に答える 1