Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL从具有命名空间的XML节点提取结果_Sql_Xml_Namespaces_Xquery - Fatal编程技术网

使用SQL从具有命名空间的XML节点提取结果

使用SQL从具有命名空间的XML节点提取结果,sql,xml,namespaces,xquery,Sql,Xml,Namespaces,Xquery,我有下面的XML,希望提取以下节点的值 1.后果 2.文件编号 3.成本要素代码 <commitmentsResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <result xmlns="http://response.cim.its.test.edu.au/">SUCCESS</result>

我有下面的XML,希望提取以下节点的值 1.后果 2.文件编号 3.成本要素代码

<commitmentsResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <result xmlns="http://response.cim.its.test.edu.au/">SUCCESS</result>
  <value xmlns="http://finance.response.cim.its.test.edu.au/">
    <documentNumber xmlns="http://finance.cim.its.test.edu.au/">12345</documentNumber>
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
    <commitmentLine xmlns="http://finance.cim.its.test.edu.au/">
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
  </value>
  </commitmentsResponse>

成功
12345
2.
成本要素代码
1000002
9999
3000
两包铅笔
100000
105.5
2015-06-15
2.
成本要素代码
1000002
9999
3000
两包铅笔
100000
105.5
2015-06-15

不使用名称空间:

DECLARE @myXML xml =  
N'<commitmentsResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <result>SUCCESS</result>
  <value>
    <documentNumber>12345</documentNumber>
    <commitmentLine>
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
    <commitmentLine xmlns="http://finance.cim.its.test.edu.au/">
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
  </value>
  </commitmentsResponse>'

  DECLARE @DocumentNumber INT  
  SELECT @DocumentNumber = [Table].[Column].value('documentNumber[1]', 'INT') 
                                 FROM @myXML.nodes('/commitmentsResponse/value') AS [Table]([Column])

  DECLARE @Result VARCHAR(256) 
  SELECT @Result = [Table].[Column].value('result[1]', 'varchar(256)') 
                                 FROM @myXML.nodes('/commitmentsResponse') AS [Table]([Column])

  DECLARE @CostElementCode VARCHAR(256)
  SELECT @CostElementCode = [Table].[Column].value('costElementCode[1]', 'varchar(256)') 
                                 FROM @myXML.nodes('/commitmentsResponse/value/commitmentLine') AS [Table]([Column])

  SELECT @Result
  SELECT @DocumentNumber
  SELECT @CostElementCode
DECLARE @myXML xml =  
N'<commitmentsResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <result xmlns="http://response.cim.its.test.edu.au/">SUCCESS</result>
  <value>
    <documentNumber xmlns="http://finance.cim.its.test.edu.au/">12345</documentNumber>
    <commitmentLine>
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
    <commitmentLine xmlns="http://finance.cim.its.test.edu.au/">
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
  </value>
  </commitmentsResponse>'

  DECLARE @DocumentNumber INT  
;WITH XMLNAMESPACES (N'http://finance.cim.its.test.edu.au/' as DYN)
 SELECT @DocumentNumber = c.value('(DYN:documentNumber)[1]', 'INT')
 FROM    @myXML.nodes('/commitmentsResponse/value') t(c)


 DECLARE @Result VARCHAR(256) 
;WITH XMLNAMESPACES (N'http://response.cim.its.test.edu.au/' as DYN)
 SELECT @Result = c.value('(DYN:result)[1]', 'VARCHAR(256)')
 FROM    @myXML.nodes('/commitmentsResponse') t(c)


  DECLARE @CostElementCode VARCHAR(256)
  SELECT @CostElementCode = c.value('(costElementCode)[1]', 'VARCHAR(256)')
  FROM    @myXML.nodes('/commitmentsResponse/value/commitmentLine') t(c)


  SELECT @Result
  SELECT @DocumentNumber
  SELECT @CostElementCode
DECLARE@myXML=
不
成功
12345
2.
成本要素代码
1000002
9999
3000
两包铅笔
100000
105.5
2015-06-15
2.
成本要素代码
1000002
9999
3000
两包铅笔
100000
105.5
2015-06-15
'
声明@DocumentNumber INT
选择@DocumentNumber=[Table].[Column].value('DocumentNumber[1],'INT'))
从@myXML.nodes('/commitmentsResponse/value')作为[表]([列])
声明@Result VARCHAR(256)
选择@Result=[Table].[Column].value('Result[1],'varchar(256)'))
从@myXML.nodes('/commitmentsResponse')作为[Table]([Column])
声明@CostElementCode VARCHAR(256)
选择@CostElementCode=[Table].[Column].value('CostElementCode[1]','varchar(256)'
从@myXML.nodes('/commitmentsResponse/value/commitmentLine')作为[表]([列])
选择@Result
选择@DocumentNumber
选择@CostElementCode
使用名称空间时:

DECLARE @myXML xml =  
N'<commitmentsResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <result>SUCCESS</result>
  <value>
    <documentNumber>12345</documentNumber>
    <commitmentLine>
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
    <commitmentLine xmlns="http://finance.cim.its.test.edu.au/">
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
  </value>
  </commitmentsResponse>'

  DECLARE @DocumentNumber INT  
  SELECT @DocumentNumber = [Table].[Column].value('documentNumber[1]', 'INT') 
                                 FROM @myXML.nodes('/commitmentsResponse/value') AS [Table]([Column])

  DECLARE @Result VARCHAR(256) 
  SELECT @Result = [Table].[Column].value('result[1]', 'varchar(256)') 
                                 FROM @myXML.nodes('/commitmentsResponse') AS [Table]([Column])

  DECLARE @CostElementCode VARCHAR(256)
  SELECT @CostElementCode = [Table].[Column].value('costElementCode[1]', 'varchar(256)') 
                                 FROM @myXML.nodes('/commitmentsResponse/value/commitmentLine') AS [Table]([Column])

  SELECT @Result
  SELECT @DocumentNumber
  SELECT @CostElementCode
DECLARE @myXML xml =  
N'<commitmentsResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <result xmlns="http://response.cim.its.test.edu.au/">SUCCESS</result>
  <value>
    <documentNumber xmlns="http://finance.cim.its.test.edu.au/">12345</documentNumber>
    <commitmentLine>
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
    <commitmentLine xmlns="http://finance.cim.its.test.edu.au/">
      <lineNumber>2</lineNumber>
      <costElementCode>costElementCode</costElementCode>
      <internalOrderNumber>1000002</internalOrderNumber>
      <costCentreCode>9999</costCentreCode>
      <wbsCode>3000</wbsCode>
      <lineDescription>2 packets of pencils</lineDescription>
      <accountNumber>100000</accountNumber>
      <itemAmount>105.5</itemAmount>
      <fundsDueDate>2015-06-15</fundsDueDate>
    </commitmentLine>
  </value>
  </commitmentsResponse>'

  DECLARE @DocumentNumber INT  
;WITH XMLNAMESPACES (N'http://finance.cim.its.test.edu.au/' as DYN)
 SELECT @DocumentNumber = c.value('(DYN:documentNumber)[1]', 'INT')
 FROM    @myXML.nodes('/commitmentsResponse/value') t(c)


 DECLARE @Result VARCHAR(256) 
;WITH XMLNAMESPACES (N'http://response.cim.its.test.edu.au/' as DYN)
 SELECT @Result = c.value('(DYN:result)[1]', 'VARCHAR(256)')
 FROM    @myXML.nodes('/commitmentsResponse') t(c)


  DECLARE @CostElementCode VARCHAR(256)
  SELECT @CostElementCode = c.value('(costElementCode)[1]', 'VARCHAR(256)')
  FROM    @myXML.nodes('/commitmentsResponse/value/commitmentLine') t(c)


  SELECT @Result
  SELECT @DocumentNumber
  SELECT @CostElementCode
DECLARE@myXML=
不
成功
12345
2.
成本要素代码
1000002
9999
3000
两包铅笔
100000
105.5
2015-06-15
2.
成本要素代码
1000002
9999
3000
两包铅笔
100000
105.5
2015-06-15
'
声明@DocumentNumber INT
;使用XMLNAMESPACES(N'http://finance.cim.its.test.edu.au/‘作为戴恩)
选择@DocumentNumber=c.value('(DYN:DocumentNumber)[1],'INT')
来自@myXML.nodes('/commitmentsResponse/value')t(c)
声明@Result VARCHAR(256)
;使用XMLNAMESPACES(N'http://response.cim.its.test.edu.au/‘作为戴恩)
选择@Result=c.value('(DYN:Result)[1],'VARCHAR(256)'
来自@myXML.nodes('/commitmentsResponse')t(c)
声明@CostElementCode VARCHAR(256)
选择@CostElementCode=c.value('(CostElementCode)[1],'VARCHAR(256)'
来自@myXML.nodes('/commitmentsResponse/value/commitmentLine')t(c)
选择@Result
选择@DocumentNumber
选择@CostElementCode

您是否使用任何特定的编程语言或DOM实现?是的,我希望使用SQLSQL任何特定的SQL实现?请添加相关标记,并在问题中指定一些细节以及您迄今为止所完成的工作。我使用了DECLARE@RESULTSET XML='12345';使用XMLNAMESPACES(“”作为s,“”作为a)选择@RESULTSET.value(“(/s:commitmentsResponse/a:value/documentNumber)[1],“varchar(max)”)Dev D:非常感谢,伙计,它工作得很好…非常感谢..我可以看到你已经将名称空间从节点中移除了.有没有一种方法我们可以拥有名称空间并获得结果呢。请看下面我的另一个答案。如果对您有效,请将其标记为答案。请将两个答案合并。在综合答案中,建议两种解决方案。@Mohitikri-上述答案对你不适用吗??如果它有效,请将其标记为答案,它也将帮助其他人。