基于xpath值创建动态xml树

我想在xpath上创建一个动态xml树。 假设我的xpath值是

Product/Organization/RegisteredDetail/something 

我希望以下列格式提供价值。

    valueOfSomething    

简而言之,我想通过读取xpath来创建树视图/树表。 我想将值放在最内层的子节点上,并在树结构中显示值的位置,或者只是以树forms显示子节点的位置。 xpath的值将有所不同。 任何使用java或jquery的建议都对我有价值。

我试图实施@ThW给出的建议。 我做了一些修改:

 var dom = document.implementation.createDocument("", "", null); var node = dom; 

新代码:

 var pathmap = new Object(); var path1 = 'Product/Organization/RegisteredDetail/something'; var path2 = 'Product/Organization/RegisteredDetail'; var path3 = 'Product/Organization/RegisteredDetail/anything/nothing'; pathmap[path1] = 'Product/Organization/RegisteredDetail/something'; pathmap[path2] = 'Product/Organization/RegisteredDetail'; pathmap[path3] = 'Product/Organization/RegisteredDetail/anything/nothing'; console.log(pathmap); for (var path in pathmap) { var parts = path.split(/\//); for (var i = 0; i < parts.length; i++) { node = node.appendChild(dom.createElement(parts[i])); } node.appendChild(dom.createTextNode('valueOfSomething')); } var serializer = new XMLSerializer(); console.log(dom); 

我得到的输出是 在此处输入图像描述

如您所见,树节点正在重复。 我需要添加它所属的valueOfSomething。 如果节点存在,则不重新创建该节点,只需添加一个新子节点。 这样的事情

    valueOfSomethng valueOfSomethng  valueOfSomethng     

我打算将xpath和valueOfSomething的值放在hashMap中。 并动态地设置’valueOfSomething’的值。

Xpath允许更多语法。 结果不一定是可以解析为元素名称列表的东西。 例如/product//something会选择产品中任何节点的后代。

如果您有一个元素名称列表,则可以轻松地从它们创建节点。 XPath可用于获取现有节点:

 function addElementByPath(parent, path, value) { var node = parent; var parts = path.split(/\//); var dom = parent.ownerDocument; var existingNode; for (var i = 0; i < parts.length; i++) { existingNode = dom.evaluate( parts[i], node, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; if (existingNode) { node = existingNode; } else { node = node.appendChild(dom.createElement(parts[i])); } } node.appendChild(dom.createTextNode(value)); } var paths = [ 'Product/Organization/RegisteredDetail/something', 'Product/Organization/RegisteredDetail', 'Product/Organization/RegisteredDetail/anything/nothing', 'Some/OtherPath' ]; var dom = document.implementation.createDocument("", "", null); var root = dom.appendChild(dom.createElement('tree')); for (var i = 0; i < paths.length; i++) { addElementByPath(root, paths[i], paths[i]) } console.dirxml(dom); 

输出:

     Product/Organization/RegisteredDetail/something Product/Organization/RegisteredDetail  Product/Organization/RegisteredDetail/anything/nothing      Some/OtherPath