Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析XML到js数据,如何访问特定标记? 处境_Javascript_Xml_Parsing_Dom_D3.js - Fatal编程技术网

Javascript 解析XML到js数据,如何访问特定标记? 处境

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

对于数据库分析工具,我需要将一组生成的XML文件(hibernate反向工程XML文件)解析为javascript,以便可视化。作为一名java开发人员,我对javascript非常陌生,因此我试图一次只迈出一小步。最终我想将xml文件解析为d3.js force layout graph,但这对我来说是一座通向远方的桥梁

复制 给定以下html文件:

<!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”)});
动态是什么意思?是否要将“类”旁边的其他节点推入节点数组?