我正在尝试构建一个单独的节点,将其属性“反转”为子元素,将子元素“反转”为属性。为此,我需要一个遍历每个属性的for循环,并迅速将其转换为具有正确名称和正确值的节点,反之亦然。这很好,花花公子,但可以理解的是这段代码不能编译。
for $subele in //music/*
return
<doc>
{
element {node-name($subele)}
{
for $deepernode in $subele/* (: first for loop :)
return
attribute {node-name($deepernode)} {concat("_",replace(lower-case($deepernode),"[^A-Za-z_0-9]","_"))}
for $deepernode in $subele/@* (: second for loop :)
return
element {node-name($deepernode)} {concat("_",replace(lower-case($deepernode),"[^A-Za-z_0-9]","_"))}
}
}
</doc>
没有其他方法可以做到这一点,或者我是否需要首先构造属性反转,然后用元素“修改”,反之亦然?
非常感谢Stack:)
答案 0 :(得分:1)
所以答案非常简单,我最初在错误的地方试过它的变种。那好吧。这是:
(for $deepernode in $subele/*
return
attribute {node-name($deepernode)} {$deepernode/string()}),
(for $deepernode in $subele/@*
return
element {node-name($deepernode)} {$deepernode/string()})
将for循环放入一个序列,可以说,将它们放在paranthesis中并在它们之间写','。就是这样。
PS:所有的concat / replace东西都是不必要的。