我有一个XML文件,该文件可能为空或已经部分填充,并且给了我一个XPath,应该在其中插入更多的xml节点。哪种更清洁的方式创建所需的所有子节点?
在我看来,我想找到类似mkdirs()
类的java.io.File
方法的东西。
示例,
给定XPath /root/child/grandson
,预期的输出将是(基于空的输入文件):
<root>
<child>
<grandson></grandson>
</child>
</root>
编辑:我现在已经设法通过拆分XPath和嵌套节点来解决我的简单用例,任何其他更清洁的解决方案都将受到赞赏。
答案 0 :(得分:1)
如果路径都这么简单(用斜杠分隔的一系列元素名称),则可以在XQuery或XSLT中使用递归函数来完成。在XQuery语法中:
declare function local:generate($names as xs:string*) as element(*) {
if (exists($names)) then
element{head($names)}{local:generate(tail($names)}
else ()
};
local:generate(tokenize("/root/child/grandson", "/")[.]);
说明:首先在“ /”边界上分割字符串;使用谓词[.]
消除空字符串;将结果的字符串序列传递给一个函数,该函数创建一个以列表中第一个字符串命名的元素,然后调用自身以处理列表的其余部分,并将结果附加为所创建元素的内容。