Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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 server 使用T-SQL解析具有默认命名空间的XML_Sql Server_Xml_Xpath_Xquery - Fatal编程技术网

Sql server 使用T-SQL解析具有默认命名空间的XML

Sql server 使用T-SQL解析具有默认命名空间的XML,sql-server,xml,xpath,xquery,Sql Server,Xml,Xpath,Xquery,在使用SSMS时,我需要以下格式来获取XML格式 <ESBTimecardLoad xmlns="http://test.com/schemas"> <Initialize xmlns="http://test.com/schemas"> <Add> <TimeCard> <Attributes>

在使用SSMS时,我需要以下格式来获取XML格式

<ESBTimecardLoad xmlns="http://test.com/schemas">
      <Initialize xmlns="http://test.com/schemas">
            <Add>
                  <TimeCard>
                        <Attributes>
                              <Timekeeper AliasField="Number">C1235</Timekeeper>
                              <WorkDate>5/11/2018</WorkDate>
                              <WorkHrs>1.50</WorkHrs>
                              <Matter AliasField="Number">04420.3004</Matter>
                              <WorkType>Admin</WorkType>
                              <Phase AliasField="Code">rty</Phase>
                              <Task AliasField="Code">QEW</Task>
                              <Activity AliasField="Code">TTT</Activity>                  
                        </Attributes>
                  </TimeCardPending>
            </Add>
            <Add>
                  <TimeCardPending>
                        <Attributes>
                              <Timekeeper AliasField="Number">C888888</Timekeeper>
                              <WorkDate>7/6/2017</WorkDate>
                              <WorkHrs>0.25</WorkHrs>
                              <Matter AliasField="Number">01594.1009</Matter>
                              <WorkType>Enterprise</WorkType>
                              <Phase AliasField="Code">P3</Phase>
                              <Task AliasField="Code">QWE</Task>
                              <Activity AliasField="Code">YYY</Activity>
                        </Attributes>
                  </TimeCardPending>
            </Add>
</Start>
</TimecardLoad>
这是我的结果:

<ESBTimeCardLoad xmlns="http://test.com/schemas">
  <Initialize xmlns="http://test.com/schemas">
    <Attributes>
      <Timekeeper>TEster, Monica</Timekeeper>
      <WorkDate>05/25/15</WorkDate>
      <WorkHrs>10.00</WorkHrs>
      <Phase>P3</Phase>
      <task>P3_Fsol</task>
      <Activity>SETUPS3</Activity>
    </Attributes>
    <Attributes>
      <Timekeeper>Mob, JOhn</Timekeeper>
      <WorkDate>05/27/15</WorkDate>
      <WorkHrs>8.00</WorkHrs>
      <Phase>P3</Phase>
      <task>P3_Fsol</task>
      <Activity>SETUPS3</Activity>
    </Attributes>
  </Initialize>
</ESBTimeCardLoad>

测试员,莫妮卡
05/25/15
10
P3
P3_Fsol
设置3
暴徒,约翰
05/27/15
8
P3
P3_Fsol
设置3
我应该以哪种方式更改查询?

您显示给我们的XML格式在许多方面都不是很好:

  • 您以
    打开,但以
  • 在第一个
    中,以
    打开,但以
    结束
  • 您不应使用与区域性相关的日期格式<代码>2018年5月11日可能被视为11月5日或5月11日
下面将通过您的一些专栏介绍这些原则。看看吧

DECLARE @tbl TABLE(ID INT IDENTITY, TimeKeeper VARCHAR(100),WorkDate DATE, WorkHrs DECIMAL(6,2), Matter VARCHAR(100));
INSERT INTO @tbl VALUES
 ('C1235','2018-11-05',1.5,04420.3004)
,('C8888','2017-06-07',0.25,01594.1009);

WITH XMLNAMESPACES (DEFAULT 'http://Test.com/schemas') 
SELECT
(
    SELECT 'Number' AS [TimeCardPending/Attributes/Timekeeper/@AliasField]
          ,TimeKeeper AS [TimeCardPending/Attributes/Timekeeper]
          ,WorkHrs AS [TimeCardPending/Attributes/WorkHrs]
          ,'Number' AS [TimeCardPending/Attributes/Matter/@AliasField]
          ,Matter AS [TimeCardPending/Attributes/Matter]
          --and so on
    FROM @tbl t
    FOR XML PATH('Add'),ROOT('Initialize'),TYPE
) AS [*]
FOR XML PATH(''),ROOT('ESBTimecardLoad');
结果

<ESBTimecardLoad xmlns="http://Test.com/schemas">
  <Initialize xmlns="http://Test.com/schemas">
    <Add>
      <TimeCardPending>
        <Attributes>
          <Timekeeper AliasField="Number">C1235</Timekeeper>
          <WorkHrs>1.50</WorkHrs>
          <Matter AliasField="Number">4420.3004</Matter>
        </Attributes>
      </TimeCardPending>
    </Add>
    <Add>
      <TimeCardPending>
        <Attributes>
          <Timekeeper AliasField="Number">C8888</Timekeeper>
          <WorkHrs>0.25</WorkHrs>
          <Matter AliasField="Number">1594.1009</Matter>
        </Attributes>
      </TimeCardPending>
    </Add>
  </Initialize>
</ESBTimecardLoad>

C1235
1.50
4420.3004
C8888
0.25
1594.1009
<ESBTimecardLoad xmlns="http://Test.com/schemas">
  <Initialize xmlns="http://Test.com/schemas">
    <Add>
      <TimeCardPending>
        <Attributes>
          <Timekeeper AliasField="Number">C1235</Timekeeper>
          <WorkHrs>1.50</WorkHrs>
          <Matter AliasField="Number">4420.3004</Matter>
        </Attributes>
      </TimeCardPending>
    </Add>
    <Add>
      <TimeCardPending>
        <Attributes>
          <Timekeeper AliasField="Number">C8888</Timekeeper>
          <WorkHrs>0.25</WorkHrs>
          <Matter AliasField="Number">1594.1009</Matter>
        </Attributes>
      </TimeCardPending>
    </Add>
  </Initialize>
</ESBTimecardLoad>