5

これまでのところ、xmlファイルから順序付けされていないリストを作成しようとしています。jQueryからxmlを処理する方法は知っていますが、マルチレベルの順序付けされていないリストを作成する方法がわかりません。

これが私がこれまでに達成したことです。

xmlファイル

<?xml version="1.0" encoding="utf-8"?>
<Parent>Director
    <Children>Exe Director1</Children>
    <Children>Exe Director2</Children>
    <Parent>Exe Director2
        <Children>Sub Director 1</Children>
        <Children>Sub Director 2</Children>
        <Parent>Sub Director 3
            <Children>Cameraman 1</Children>
            <Children>Cameraman 2</Children>
        </Parent>
    </Parent>    
</Parent>

htmlファイル

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
    var levels;
    $(document).ready(function() 
    {
        $.ajax({
            type: "GET",
            url: "test.xml",
            dataType: "xml",
            success: xmlParser
        });
    });
    function xmlParser(xml)
{
    $(xml).find("Children").each(function()
    { 
        var text = $(this).text();
    });
}
</script>
</head>
<body>
    <div id="ListContainer"></div>
</body>
</html>

これは予想されるリストです

<ul>
    <li>Exe Director1</li>
    <li>Exe Director2</li>
    <ul>
        <li>Sub Director 1</li>
        <li>Sub Director 2</li>
        <ul>
            <li>Cameraman 1</li>
            <li>Cameraman 2</li>
        </ul>
    </ul>
</ul>

助けてくれませんか!

編集:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
    var levels;
    $(document).ready(function() 
    {
        $.ajax({
            type: "GET",
            url: "test.xml",
            dataType: "xml",
            success: function (xml) { xmlParser($(xml)); }
        });
    });
    function xmlParser(xml) {
        //alert($(xml).contents());  
        var $ul = $("<ul>"); // For each Parent, create an <ul>
        $(xml).contents().each(function (i, el) {
            if (el.nodeType == 3) return true;
            if (el.nodeName.toUpperCase() == "CHILDREN") 
            {
               $("<li>").text($(el).text()).appendTo($ul); // Append <li> Children
            } else 
            {
               $ul.append(xmlParser($(el))); // Recursively append the other Parent
            }
            //$("#ListContainer").append($ul);
        });
        //alert($ul.html());
        $("#ListContainer").append($ul);
    }
</script>
</head>
<body>
    <div id="ListContainer"></div>
</body>
</html>
4

2 に答える 2

5

順序付けされていないリストを再帰的に作成します。

function xmlParser($xml) {   
    var $ul = $("<ul>"); // For each Parent, create an <ul>
    $xml.contents().each(function (i, el) {
        if (el.nodeType == 3) return true;
        if (el.nodeName.toUpperCase() == "CHILDREN") {
           $("<li>").text($(el).text()).appendTo($ul); // Append <li> Children
        } else {
           $ul.append(xmlParser($(el))); // Recursively append the other Parent
        }
    });
    return $ul;
}

これがデモです。Parent各グループとそれぞれChildrenを個別のユニットと考えてください。たとえば、XMLが次のようになっている場合:

<Parent>Director
    <Children>Exe Director1</Children>
    <Children>Exe Director2</Children>
</Parent>

結果のHTMLは次のようになります。

<ul>
    <li>Exe Director1</li>
    <li>Exe Director2</li>
</ul>

これをどのように構築しますか?それは非常に簡単です。<ul>要素を作成し、それぞれに要素をChildren追加します<li>。さて、再帰的な部分については、別のを導入するときに、それが単一のユニットである場合はParent別のを作成し、その結果をに追加するだけです。<ul> <ul>

上記で使用した関数では、引数としてjQueryオブジェクトを渡す必要があるため、successハンドラーを変更する必要があることに注意してください。

success: function (xml) {
  xmlParser($(xml));
}
于 2012-09-29T16:41:02.210 に答える
2

まず、success: xmlParser構文を変更し、

success: function(data){
    xmlParser(data)
}
于 2012-09-29T16:41:13.640 に答える