【发布时间】:2009-10-15 18:11:22
【问题描述】:
我有一些基本代码可以循环访问从 Adobe RoboHelp 生成的一些 XML(用于我们的帮助文档)。这很好用,但由于一个主题可以嵌套任意多次,我需要一种更好的方法来循环这个 XML,而不是仅仅嵌套 .each() 循环。
这是 XML 的样子
<?xml version="1.0" encoding="utf-8"?>
<!--RoboML: Table of Content-->
<roboml_toc>
<page title="Welcome" url="Welcome.htm"/>
<book title="Getting Started" url="Getting_Started/Initial_Setup.htm">
<page title="Initial Setup" url="Getting_Started/Initial_Setup.htm"/>
<page title="Customize Settings" url="Getting_Started/Settings.htm"/>
</book>
<book title="Administrator Services" url="Administrator_Services/General_Administrator.htm">
<book title="Portal Workspace" url="Administrator_Services/Portal_Workspace/AdminHome.htm">
<page title="Home" url="Administrator_Services/Portal_Workspace/AdminHome.htm"/>
<page title="Portal Accounts" url="Administrator_Services/Portal_Workspace/Portal_Accounts.htm"/>
</book>
<book title="SpamLab" url="Administrator_Services/SpamLab/SpamLab_Admin_General.htm">
<page title="Alerts" url="Administrator_Services/SpamLab/Alerts.htm"/>
<page title="Spam Quarantine" url="Administrator_Services/SpamLab/Admin_Spam_Quarantine_.htm"/>
</book>
</book>
<book title="User Services" url="User_Services/General_User.htm">
<book title="Portal Workspace" url="User_Services/Portal_Workspace/Home.htm">
<page title="Home" url="User_Services/Portal_Workspace/Home.htm"/>
<page title="Self Help" url="User_Services/Portal_Workspace/Self_Help.htm"/>
</book>
<book title="SpamLab" url="User_Services/SpamLab/SpamLab_General.htm">
<page title="Spam Quarantine" url="User_Services/SpamLab/Spam_Quarantine.htm"/>
<page title="Virus Quarantine" url="User_Services/SpamLab/Virus_Quarantine.htm"/>
</book>
<book title="Encryption" url="User_Services/Encryption/Encryption_General.htm">
<page title="Outlook Plug-in" url="User_Services/Encryption/Encryption_Outlook_Plug_in.htm"/>
</book>
</book>
</roboml_toc>
<page> 是一篇文章,<book> 是一个文件夹。
她是我的 jQuery 代码,只能看一级标签
//Get the TOC
$tocOutput="";
$.get(tocURL,function(toc){
$(toc).children().each(function(){
$tocOutput+="<li><a href='"+$(this).attr("url")+"'>"+$(this).attr("title")+"</a>";
if(this.tagName=="BOOK"){
$tocOutput+="<ul>";
$(this).find("page").each(function(){
$tocOutput+="<li><a href='"+$(this).attr("url")+"'>"+$(this).attr("title")+"</a></li>";
});
$tocOutput+="</ul>";
}
$tocOutput+="</li>";
});
$("#list").html($tocOutput);
我知道有一种更好的方法可以遍历所有元素,然后确定该元素是否有子元素等,但我就是想不出该怎么做。
非常感谢任何帮助!
【问题讨论】:
-
只是好奇 - 为什么必须在客户端上执行此操作?为什么不在服务器上应用 XSLT 转换并发送 html? xml是动态的吗?转换后的html会不会缓存在服务器上?
-
无论如何,很高兴您找到了解决方案 - 现在接受 KEITH 的回答 :)
-
我拒绝!现在这只是一个概念证明......实际上我只是想给一些人留下深刻印象。他们现在对我赞不绝口,所以这是值得的。最终我认为我们会做这个服务器端。