基于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
- 尝试在jQuery + Struts2中执行ajax getJson或post操作时,Tomcat7上出现500内部服务器错误
- Selenium Web自动化 – 将值发送到“禁用”文本框
- 无法解析来自服务器的JSON数据
- 使用数组或列表在JSP中自动完成文本框
- 如何在下载文件后隐藏动画gif?
- Selenium Webdriver – 等待页面完全加载Java和JavaScript(ajax / jquery / animation等)
- Java RESTful服务的Jquery调用不工作CORS
- Java with ajax – ERR_EMPTY_RESPONSE – Ajax响应在服务器处理请求时抛出错误
- 将jquery datepicker集成到jsf中