簡體   English   中英

將 xml 解析為 sql 列

[英]parsing xml into sql columns

我需要將值從 XML 解析為 SQL 列的

XML 看起來像這樣

<GetCategorySpecificsResponse xmlns="urn:ebay:apis:eBLBaseComponents">
    <Timestamp>2020-11-22T23:17:48.772Z</Timestamp>
    <Ack>Success</Ack>
    <Version>1179</Version>
    <Build>E1179_CORE_API6_19296588_R1</Build>
    <Recommendations>
        <CategoryID>22422</CategoryID>
        <NameRecommendation>
            <Name>Binding</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
            <ValueRecommendation>
                <Value>Cloth</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Disbound</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Fine Binding</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Hardcover</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Leather</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Loose Pages</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Unbound</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Vellum</Value>
                <ValidationRules />
            </ValueRecommendation>
        </NameRecommendation>
        <NameRecommendation>
            <Name>Subject</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
            <ValueRecommendation>
                <Value>Art</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Children's</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>History</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Law</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Literature</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Medicine</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Natural Science</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Philosophy</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Reference</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Religion, Bibles</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Science &amp; Technology</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Travel</Value>
                <ValidationRules />
            </ValueRecommendation>
        </NameRecommendation>
        <NameRecommendation>
            <Name>Original/Facsimile</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
            <ValueRecommendation>
                <Value>Original</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Facsimile</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Unknown</Value>
                <ValidationRules />
            </ValueRecommendation>
        </NameRecommendation>
        <NameRecommendation>
            <Name>Date of Publication</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
            <ValueRecommendation>
                <Value>Unknown</Value>
                <ValidationRules />
            </ValueRecommendation>
            <HelpText>Please indicate the year when the book was published (between 1454-1540)</HelpText>
        </NameRecommendation>
        <NameRecommendation>
            <Name>Language</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
            <ValueRecommendation>
                <Value>Arabic</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Bengali</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Bulgarian</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Chinese</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Czech</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Danish</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Dutch</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>English</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Finnish</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>French</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>German</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Greek</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Hebrew</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Hindi/Urdu</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Hungarian</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Irish</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Italian</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Japanese</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Korean</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Latin</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Latvian</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Lithuanian</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Malay</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Norwegian</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Polish</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Portuguese</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Russian</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Serbian</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Slovenian</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Spanish</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Swedish</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Turkish</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Vietnamese</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Welsh</Value>
                <ValidationRules />
            </ValueRecommendation>
        </NameRecommendation>
        <NameRecommendation>
            <Name>Special Attributes</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>30</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
            <ValueRecommendation>
                <Value>First Edition</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Illustrated</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Signed</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>With Dust Jacket</Value>
                <ValidationRules />
            </ValueRecommendation>
        </NameRecommendation>
        <NameRecommendation>
            <Name>Region</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
            <ValueRecommendation>
                <Value>Africa</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Antarctica</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Asia</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Australia, Oceania</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Europe</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Middle East</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>North America</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>South America</Value>
                <ValidationRules />
            </ValueRecommendation>
        </NameRecommendation>
        <NameRecommendation>
            <Name>Publisher</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
        </NameRecommendation>
        <NameRecommendation>
            <Name>Place of Publication</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
        </NameRecommendation>
        <NameRecommendation>
            <Name>Author</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Optional</UsageConstraint>
            </ValidationRules>
        </NameRecommendation>
        <NameRecommendation>
            <Name>California Prop 65 Warning</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <AspectUsage>Instance</AspectUsage>
                <MaxValueLength>800</MaxValueLength>
                <UsageConstraint>Optional</UsageConstraint>
                <VariationSpecifics>Disabled</VariationSpecifics>
            </ValidationRules>
            <HelpText>California Proposition 65 requires businesses to provide warnings to Californians about significant exposure to chemicals that cause cancer, birth defects, or other reproductive harm. Add details about the warning you want to show California buyers. We'll add a warning symbol and the word 'WARNING:' before the description you enter here, and we’ll add 'For more information go to www.P65Warnings.ca.gov' following your description.</HelpText>
        </NameRecommendation>
    </Recommendations>
    <Recommendations>
        <CategoryID>23048</CategoryID>
        <NameRecommendation>
            <Name>Material</Name>
            <ValidationRules>
                <ValueType>Text</ValueType>
                <MaxValues>1</MaxValues>
                <SelectionMode>FreeText</SelectionMode>
                <UsageConstraint>Recommended</UsageConstraint>
            </ValidationRules>
            <ValueRecommendation>
                <Value>Paper</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Papyrus</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Parchment</Value>
                <ValidationRules />
            </ValueRecommendation>
            <ValueRecommendation>
                <Value>Vellum</Value>
            </ValueRecommendation>
        </NameRecommendation>
    </Recommendations>
</GetCategorySpecificsResponse>

我試過的是:

USE OPENXMLTesting
GO

DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
SELECT @XML = XMLData FROM XMLwithOpenXML_2
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML


SELECT Category_ID, NameRecomendation
FROM OPENXML(@hDoc, 'GetCategorySpecificsResponse/Recomendations')
WITH 
(
Category_ID [varchar](100) 'Category_ID',
NameRecomendation [varchar](100) 'NameRecommendation'
)

EXEC sp_xml_removedocument @hDoc
GO

但我總是得到空桌子。 由於我無法解析第一級,因此進一步獲得最終解決方案將包含列是無稽之談。

  1. 類別 ID、名稱推薦/名稱、
  2. 名稱推薦/驗證規則/選擇模式
  3. 名稱推薦/驗證規則/使用約束
  4. 名稱推薦/驗證規則/值類型
  5. 名稱推薦/價值推薦/價值

沒有預期的結果,這是一個猜測,但返回結果應該足以讓您填補空白:

DECLARE @XML = {Your XML};

WITH XMLNAMESPACES(DEFAULT 'urn:ebay:apis:eBLBaseComponents')
SELECT GCSR.R.value('(CategoryID/text())[1]','int') AS CategoryID,
       R.NR.value('(Name/text())[1]','varchar(20)') AS [Name],
       R.NR.value('(ValidationRules/UsageConstraint/text())[1]','varchar(20)') AS UsageConstraint,
       NR.VR.value('(Value/text())[1]','varchar(20)') AS [Value]
FROM (VALUES(@XML))V(X)
     CROSS APPLY V.X.nodes('GetCategorySpecificsResponse/Recommendations')GCSR(R)
     CROSS APPLY GCSR.R.nodes('./NameRecommendation')R(NR)
     CROSS APPLY R.NR.nodes('./ValueRecommendation') NR(VR);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM