我想将任何xml文件导出到excel文件(xls或制表符分隔)

时间:2015-02-10 15:14:23

标签: javascript jquery xml export-to-excel tab-delimited

我想将任何xml文件导出为ex​​cel(xls或制表符分隔)。我正在使用Jquery打开xml。我创建了一个递归函数来测试一个节点是否有子节点,这就是我被困住的地方。我想要的一个例子:

<form1>
    <Q1-2>
        <division>Tony</division>
        <branch>Sailer Branch</branch>
    </Q1-2>
    <Q3>
        <moreServBusFunctProg>
            <Row2>
                <servFunctProgr>Awesome Service</servFunctProgr>
            </Row2>
            <Row3>
                <servFunctProgr>Whatever you want</servFunctProgr>
            </Row3>
            <Row4>
                <servFunctProgr>Service with quality</servFunctProgr>
            </Row4>
            <Row5>
                <servFunctProgr>Everything</servFunctProgr>
            </Row5>
            <Row6>
                <servFunctProgr>Function 1</servFunctProgr>
            </Row6>
        </moreServBusFunctProg>
    </Q3>
</form1>

我想要检索:

----------------------------------------------------------------------------------------
| division | branch        | servFunctProgr  | servFunctProgr    | servFunctProgr       |
----------------------------------------------------------------------------------------
| Tony     | Sailer Branch | Awesome Service | Whatever you want | Service with quality |
----------------------------------------------------------------------------------------

现在我正在分享我的递归功能

function showTags(jqueryObject,text,tags) 
{
  if (jqueryObject.length === 0)
  {
    return;
  }
  jqueryObject.children().each(function() {
    tags += "\t" + this.nodeName.toLowerCase();
    text += $(jqueryObject).contents().text() + "\t" ;
    showTags($(this),text, tags);
    alert(tags);
  });

  //alert(text);
}

1 个答案:

答案 0 :(得分:0)

我解决了我的问题以防其他人试图做同样的事情。 首先,我必须创建一个对象方法,这样每当我将它们作为参数传递给递归函数时,我就可以保留变量的当前值。

function result(txt, tgs, i) {
                    this.text = txt
                    this.tags = tgs
                    this.i = i
                }

其次,我将文件中的文本作为字符串存储到名为allText的变量中。 然后我在调用递归函数之前创建并初始化了一些变量:

var allText = $('#editor').text();
i = 0;
    txt = "";
    tags = "";
    rs = new result(txt,tags,i);
    showTags($(allText),rs)

最后,我创建了递归函数:

function showTags(jqueryObject,rs) {

                    tempTag = "";
                    tag = new Array();
                    tempTst = "";
                    tst = new Array();
                    firstLine = "";
                    secondLine = "";

                    if (jqueryObject.children().length === 0)
                    {

                        //alert(" in last");
                        return;
                    }
                    else
                    {
                        jqueryObject.children().each(function() {
                            //alert("J suis au else");
                            tempTag = this.nodeName.toLowerCase();
                            //alert(tempTag);
                            if($(this).children().length ===0)
                            {
                                $(jqueryObject).find(tempTag).each(function(){
                                    rs.text +=($(this).contents().eq(0).text() +"\t");
                                    rs.tags +=(tempTag + "\t");
                                    //alert("<" + tag [i] + ">" + tst [i] + "</" + tag [i] + ">");
                                    (rs.i)++;
                                    //alert(rs.tags + "\n" + rs.text);
                                });
                            }
                            else
                            {
                                showTags($(this),rs);
                            }
                        });
                    }

                }

而且,是的,它有效。现在我只检索具有子文本和节点中文本的节点。我最后做的是创建一个新的制表符分隔文件,其中我粘贴在第一行检索的所有xml标记及其所有内容在第二行。 我将我的xml转换为制表符分隔文件,我可以用excel打开。