从XML文档中获取属性值的值

时间:2013-02-11 06:16:37

标签: xml xpath xquery

我正在使用Editix运行一些XML查询,而我正试图从标签中获取“角色”属性...

<actor id="5" role="Richie Cusack"/>

....并在我生成的标签之间插入值,就像这样......

<role>Richie Cusack</role>

...但我正在运行的查询是将角色属性值插回到我所环绕的标签的属性中,例如......

<role role="Richie Cusack"/>

这是我的XQuery查询....

<results>
{
let $ms := doc("xmlPath.xml"),
for $m in $ms//movie
    for $r in $m/actor/@role
    return <result>
        {$m/title}<role>{$r}</role>
         </result>
}
</results>

...这里是XML文件的结构......

<movies>
  <movie>
    <title>A History of Violence</title>
    <year>2005</year>
    <country>USA</country>
    <genre>Crime</genre>
    <summary>Tom Stall, a humble family man and owner of a 
    .</summary>
    <director id="1"/>
    <actor id="5" role="Richie Cusack"/>
 </movie>
  <movie>
    <title>Heat</title>
    <year>1995</year>
    <country>USA</country>
    <genre>Crime</genre>
    <summary>Hunters and their prey--Neil and his professional 
    .... </summary>
    <director id="6"/>
    <actor id="7" role="Lt. Vincent Hanna"/>
</movies>

如何只提取属性的值并将其嵌入标签之间而不以属性的形式插入?

1 个答案:

答案 0 :(得分:1)

在此查询中,$r本身就是一个属性,因此将其添加到父节点<role>(您可以注意到$m/title发生了同样的事情 - 元素本身,而不仅仅是其文本,正被添加到<result>)。

要获得您正在寻找的行为,请执行以下操作:

<role>{string($r)}</role>