首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:XQuery [value()]:")“

:XQuery [value()]:")“
EN

Stack Overflow用户
提问于 2015-10-20 16:33:07
回答 2查看 4.3K关注 0票数 2

我试图从XML数据将数据插入SQL中的表中。XML文件是从Microsoft Excel创建的,它提供了以下标题:

代码语言:javascript
复制
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">

我使用这个查询来解析它:

代码语言:javascript
复制
;WITH XMLNAMESPACES ('urn:schemas-microsoft-com:office:spreadsheet' as ss)

select X.value('(ss:Row/ss:Cell/ss:@Data)','varchar(max)')
from @allUsers.nodes('Workbook/Worksheet/Table') as T(X)

它解析了大约半秒钟,然后给出了这个错误:

预期XQuery值():")“。

正在分析的XML中的数据包含电话号码,其中一些包含(),例如:

代码语言:javascript
复制
   <Row ss:AutoFitHeight="0" ss:Height="30">
    <Cell ss:StyleID="s22"/>
    <Cell ss:StyleID="s24"><Data ss:Type="String">JohnSmith</Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String">JohnSmith</Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String">XYZ</Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String">(555) 555-5555</Data></Cell>
    <Cell ss:StyleID="s22"/>
   </Row>

但我不认为圆括号内的开括号会引起问题。

我的问题是,以前有没有其他人遇到过这个错误,因为我似乎无法通过在线搜索找到任何帮助?

编辑--我想在这种情况下我可能走错了方向。我在这里发布了一个新问题:Separating XML values with the same tags into different rows SQL Server

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-20 19:44:04

你问了非常相似的问题。我从这两个方面都得到了信息,并建立了这个工作例子。请注意必须声明为“默认”的xmlns-命名空间:

简化了你的XML,但是这个想法应该是可以的.

代码语言:javascript
复制
DECLARE @allUsers XML=
'<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Worksheet>
 <Table>
   <Row ss:AutoFitHeight="0" ss:Height="30">
    <Cell ss:StyleID="s22"/>
    <Cell ss:StyleID="s24"><Data ss:Type="String">Jane Doe</Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String">JaneDoe</Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String">XYZ</Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String">(555) 555-5555</Data></Cell>
    <Cell ss:StyleID="s22"/>
   </Row>
   </Table>
 </Worksheet>   
</Workbook>';

;WITH XMLNAMESPACES ('urn:schemas-microsoft-com:office:spreadsheet' as ss
                     ,DEFAULT 'urn:schemas-microsoft-com:office:spreadsheet')
SELECT T.X.value('Cell[1]/Data[1]','varchar(max)') AS DontKnow1
      ,T.X.value('Cell[2]/Data[1]','varchar(max)') AS Name
      ,T.X.value('Cell[3]/Data[1]','varchar(max)') AS UserName
      ,T.X.value('Cell[4]/Data[1]','varchar(max)') AS DontKnow2
      ,T.X.value('Cell[5]/Data[1]','varchar(max)') AS Telephone
      ,T.X.value('Cell[6]/Data[1]','varchar(max)') AS DontKnow3
FROM @allUsers.nodes('/Workbook/Worksheet/Table/Row') as T(X)
票数 2
EN

Stack Overflow用户

发布于 2015-10-20 16:53:37

导致错误的可能不是电话号码中的括号,而是您的XQuery查询,我认为它有语法错误。

@不在正确的位置,也可能需要离开,因为数据不是属性,而是元素。你可以试着改变

代码语言:javascript
复制
select X.value('(ss:Row/ss:Cell/ss:@Data)','varchar(max)')
from @allUsers.nodes('Workbook/Worksheet/Table') as T(X)

代码语言:javascript
复制
select X.value('(ss:Row/ss:Cell/ss:Data)[1]','varchar(max)')
from @allUsers.nodes('ss:Workbook/ss:Worksheet/ss:Table') as T(X)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33242024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档