Javascript 解析XML到js数据,如何访问特定标记? 处境
对于数据库分析工具,我需要将一组生成的XML文件(hibernate反向工程XML文件)解析为javascript,以便可视化。作为一名java开发人员,我对javascript非常陌生,因此我试图一次只迈出一小步。最终我想将xml文件解析为d3.js force layout graph,但这对我来说是一座通向远方的桥梁 复制 给定以下html文件:Javascript 解析XML到js数据,如何访问特定标记? 处境,javascript,xml,parsing,dom,d3.js,Javascript,Xml,Parsing,Dom,D3.js,对于数据库分析工具,我需要将一组生成的XML文件(hibernate反向工程XML文件)解析为javascript,以便可视化。作为一名java开发人员,我对javascript非常陌生,因此我试图一次只迈出一小步。最终我想将xml文件解析为d3.js force layout graph,但这对我来说是一座通向远方的桥梁 复制 给定以下html文件: <!DOCTYPE html> <meta charset="utf-8"> <script src="//d3j
<!DOCTYPE html>
<meta charset="utf-8">
<script src="//d3js.org/d3.v3.min.js"></script>
<script src=d3-queue.js></script>
<script>
var q = d3_queue.queue();
// TODO 1: for each xml in folder xyz ... defer(d3.xml, "dynamicvalue", "application/xml") instead of hard coded
.defer(d3.xml, "Actor.hbm.xml", "application/xml")
.defer(d3.xml, "Film.hbm.xml", "application/xml")
.defer(d3.xml, "Category.hbm.xml", "application/xml")
.await(analyze);
// obviously the function parameter need to be dynamic and not hard coded actor, film, category...
function analyze(error, actor,film,category) {
// TODO 2: for each read xml do ...
if (error) throw error;
console.log(category)
console.log("XML Root Tag Name: " + category.documentElement.tagName)
console.log("Checking Child Nodes: " + category.documentElement.childNodes[0].hasChildNodes)
console.log("First Child: " + category.documentElement.childNodes[1].firstChild.tagName)
console.log("Node Value: " + category.documentElement.childNodes[0].attributes.getNamedItem("id").nodeValue)
}
</script>
var q=d3_queue.queue();
//TODO 1:对于文件夹xyz中的每个xml。。。延迟(d3.xml,“dynamicvalue”,“application/xml”),而不是硬编码
.defer(d3.xml、“Actor.hbm.xml”、“application/xml”)
.defer(d3.xml、“Film.hbm.xml”、“application/xml”)
.defer(d3.xml、“Category.hbm.xml”、“application/xml”)
.等待(分析);
//显然,功能参数需要是动态的,而不是硬编码的演员、电影、类别。。。
功能分析(错误、演员、电影、类别){
//TODO 2:对于每个读取xml的操作。。。
如果(错误)抛出错误;
console.log(类别)
console.log(“XML根标记名:”+category.documentElement.tagName)
console.log(“检查子节点:”+category.documentElement.childNodes[0].hasChildNodes)
console.log(“第一个子节点:+category.documentElement.childNodes[1].firstChild.tagName)
console.log(“节点值:”+category.documentElement.childNodes[0]。attributes.getNamedItem(“id”).nodeValue)
}
并给出以下示例.xml文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 15-mrt-2016 20:29:28 by Hibernate Tools 3.2.2.GA -->
<hibernate-mapping>
<class name="nl.sander.mieras.localhost.sakila.Category" table="category" catalog="sakila">
<id name="categoryId" type="java.lang.Byte">
<column name="category_id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="25" not-null="true" />
</property>
<property name="lastUpdate" type="timestamp">
<column name="last_update" length="0" not-null="true" />
</property>
<set name="filmCategories" inverse="true">
<key>
<column name="category_id" not-null="true" />
</key>
<one-to-many class="nl.sander.mieras.localhost.sakila.FilmCategory" />
</set>
</class>
</hibernate-mapping>
问题:
如何从表名(这里是:“category”)中动态读取值并将其保存到var节点
很长一段时间以来,我一直致力于将xml解析为正确的js数据,因此任何朝着正确方向的推进都将是惊人的
研究
我已经尝试了来自的例子,但没有得到预期的结果。对于子节点,这些预期结果类似于
此外,我还广泛尝试根据@Lars Grammel对这个问题给出的答案让事情运转起来。即使链接和答案很好,我也不能让它适合我的情况(没有足够的知识)
第一个“结束”目标是创建一个强制布局,将所有表名作为节点(没有链接,链接最终将是一对多和多对一映射),如所示。是否读取“表”属性的值 您可以在jQuery中执行此操作,例如:
$.get("some.xml", function(d){
console.log($(d).find("class").attr("table"));
});
这将显示:“分类”谢谢@thebiz,这对我很有帮助。我的问题还有一小部分。假设字符串“category”现在保存到d变量中,是否正确。我如何将其保存到(比如)一个节点为多个值数组的var节点?我将接受你的答案,并在一个新主题中提出我的剩余问题。非常感谢@thebiz对您的帮助!您到底想在节点数组中存储什么?如果您有一个名为“nodes”的数组,您可以像这样轻松地在其中推送值:
nodes.push($(d).find(“class”).attr(“table”)代码>对象节点数组应该如下所示:var节点=[{“id”:0,“label”:“Film”}
因此我尝试了以下方法:var节点=[];$.get(“Film.hbm.xml”,函数(d){var table=$(d)。find(“class”).attr(“table”)console.log(table)var节点={//如何将节点数组的索引分配为id?id:0,标签:table};console.log(node);nodes.push(node);console.log(nodes);};
但这不是非常动态的nodes.push({“id”:nodes.length,“label”:$(d).find(“class”).attr(“table”)});
动态是什么意思?是否要将“类”旁边的其他节点推入节点数组?