如何在 XQuery 中选择节点的属性值?

Posted

技术标签:

【中文标题】如何在 XQuery 中选择节点的属性值?【英文标题】:how to select attribute value of a node in XQuery? 【发布时间】:2013-04-09 14:58:45 【问题描述】:

在下面的 XML 中:

<company>
    <customers>
    <customer cno="2222">
            <cname>Charles</cname>
            <street>123 Main St.</street>
            <city>Wichita</city>
            <zip>67226</zip>
            <phone>316-636-5555</phone>
        </customer>
        <customer cno="1000">
            <cname>Bismita</cname>
            <street>Ashford Dunwoody</street>
            <city>Wichita</city>
            <zip>67226-1555</zip>
            <phone>000-000-0000</phone>
        </customer>     
    </customers>
</company>

我需要获取作为属性的客户编号。 在 XPath 中我知道它是 /company/customers/customer/@cno,在 XQuery 中我尝试了下面的表达式但对我不起作用:

for $c in /company/customers/customer
return $c/@cno

【问题讨论】:

XQuery 使用纯 XPath;你的尝试对我有用。 return $c 带给你什么? 我正在为此使用 EditX 软件,但它显示错误“无法创建其父节点为文档节点的属性节点。”你能告诉我你用哪个工具试试这个,所以我可以切换到那个工具。可能是特定于工具的问题。 Using XQuery/XPath to get the attribute value of an element's parent node 的可能重复项 有时搜索确切的错误信息会产生奇迹。这个问题对我来说是第一个问题,我相信它也会为你做同样的事情。 您也可以使用较短的/company/customers/customer/@cno/data(),它不需要显式循环。 【参考方案1】:

也可以使用string获取属性值:

for $c in /company/customers/customer
    return $c/@cno/string()

【讨论】:

我能够让它在将它包装在 data() 中没有的情况下工作。我认为这是因为我的解析器严格来说是较旧的 xpath/xquery。【参考方案2】:

你应该使用数据来选择属性值:-

for $c in /company/customers/customer
return data($c/@cno)

【讨论】:

以上是关于如何在 XQuery 中选择节点的属性值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS SQL 2005 中使用 SQL XQuery 修改多个节点

如何使用 XQuery 检索父节点?

sql 使用XQuery方法查询,值,存在,节点在SQL Server中查询XML

如何删除 XQuery 中的重复节点?

XQuery 术语

xQuery,如何从带有孩子的节点获取文本?