使用jquery在xml中找出根节点标记

时间:2013-07-27 17:35:24

标签: javascript jquery xml parsing tags

我有一个带有不同根节点的xml文件。 xml是动态创建的(动态)。

我想找出根标签。即

*)ns:workflowInvoked

*)ns:invokingService

*)ns:sendingResult

为每个xml块。

这是示例xml块的一部分。我只粘贴了三个块。我有更多xml块,所有块都有不同的根标记。这里用root标签我的意思是

*)NS:workflowInvoked *)ns:invokingService *)ns:sendingResult

我需要解析它们。

   <ns:workflowInvoked 
    xmlns:ns="http://xxxxx/schemas/wft/2011/08" 
    infoModelVersion="2.6">
    <ns:notificationSource 
        ns:serviceID="Workflow1_cbc2c80b_511c_4a5b_9f88_fa789378296b" 
        ns:experimentID="Workflow1_cbc2c80b-511c-4a5b-9f88-fa789378296b" />
    <ns:timestamp>2013-07-26T23:45:37.654+05:30</ns:timestamp>
    <ns:description>echo=hi vija</ns:description><ns:annotation />
    <ns:initiator ns:serviceID="Workflow1_cbc2c80b_511c_4a5b_9f88_fa789378296b" />
</ns:workflowInvoked>


<ns:invokingService xmlns:ns="http://xxxxxx/schemas/wft/2011/08" infoModelVersion="2.6"><ns:notificationSource ns:serviceID="Workflow1_904264c9_1e41_419b_afa3_409b040dc472" ns:experimentID="Workflow1_904264c9-1e41-419b-afa3-409b040dc472" /><ns:timestamp>2013-07-23T03:21:44.295+05:30</ns:timestamp><ns:description>echo=nice work</ns:description><ns:annotation /><ns:request><ns:body><n1:greet xmlns:n1="http://samples.airavata.apache.org"><n1:echo>nice work</n1:echo></n1:greet></ns:body></ns:request><ns:receiver ns:serviceID="SimpleMathServicePortType_greet" ns:workflowID="Workflow1_904264c9_1e41_419b_afa3_409b040dc472" ns:workflowTimestep="0" ns:workflowNodeID="SimpleMathServicePortType_greet" />
</ns:invokingService>

<ns:sendingResult xmlns:ns="http://xxxxxx/schemas/wft/2011/08" infoModelVersion="2.6"><ns:notificationSource ns:serviceID="Workflow1_904264c9_1e41_419b_afa3_409b040dc472" ns:experimentID="Workflow1_904264c9-1e41-419b-afa3-409b040dc472" /><ns:timestamp>2013-07-23T03:21:49.041+05:30</ns:timestamp><ns:description /><ns:annotation /><ns:receiver ns:serviceID="Workflow1_904264c9_1e41_419b_afa3_409b040dc472" />
</ns:sendingResult>

我尝试过的事情

如果$ xml一次有上述xml之一 我尝试使用

 console.log($xml.find("*").eq(0)[0].nodeName);

但这给了我o / p as

* ns:notificationSource *

然后我尝试了

    console.log($xml.find("*").eq(0).nodeName);
and 
console.log($xml.find("*").nodeName);

他们抛出o / p为

* undefined *

我想要的是

我想打印根标签。

*)ns:workflowInvoked

*)ns:invokingService

*)ns:sendingResult

有人可以指出我犯的错误。看来我的代码是正确的。

2 个答案:

答案 0 :(得分:0)

.find()搜索后代,这里你的根标签不是后代,它们是彼此的兄弟。你可以将它包装在任何包装内,但我认为你只是在寻找它:

$(xml).filter(':not(:text)').eq(0)  //=> ns:workflowInvoked node
$(xml).filter(':not(:text)').eq(1)  //=> ns:invokingService node

DEMO

答案 1 :(得分:0)

您好我在google上做了一些搜索。经历了Jquery文档。

console.log($xml.filter('*').eq(0)[0].nodeName);

完成这项工作。