sql-server
  • xpath
  • 2013-04-05 110 views 4 likes 
    4

    我正嘗試在Sql Server中使用XPath來選擇以下xml文檔的Lookup.Result元素的文本節點。使用XPath選擇名稱中帶有點的xml節點

    <Commands> 
    <Command id="1"> 
    <Lookup.Result>Result.OK</Lookup.Result> 
    </Command> 
    </Commands> 
    

    我嘗試以下查詢:

    declare @xml xml 
    set @xml = '<Commands> 
        <Command id="1"> 
        <Lookup.Result>Result.OK</Lookup.Result> 
        </Command> 
        </Commands> 
    ' 
    select t.c.value('./Lookup&#46;Result/text()[1]', 'varchar(20)') 
    from @xml.nodes('/Commands/Command') t(c) 
    

    ,但我得到了以下錯誤: 的XQuery [值()]:語法錯誤附近 '查找'

    我如何能逃脫。 (Lookup.Result元素標記名稱中的點)在XPath表達式中? 請幫忙找到一個優雅的解決方案來解決這個問題。 預先感謝您的時間。

    回答

    3
    declare @xml xml 
        set @xml = '<Commands> 
        <Command id="1"> 
        <Lookup.Result>Result.OK</Lookup.Result> 
        </Command> 
        </Commands> ' 
    
        select t.c.value('(./Lookup.Result/text())[1]', 'varchar(20)') 
        from @xml.nodes('/Commands/Command') t(c) 
    

    你缺少的

    ()

    圍繞上述的XPath,MSSQL處理。在我的機器上罰款

    +0

    你說得對。調試時有很多組合,我在其中一個組合中省略了括號...... :))現在可以工作。似乎一個點總是被解釋爲當前節點,但似乎在某些情況下它被認爲只是一個文本。謝謝。 – Vakho 2013-04-05 13:06:39

    +0

    @ user2248972沒問題。如果您願意,您可以將答案標記爲已接受。 – Filip 2013-04-05 13:59:27

    0

    那麼只有5個逃生字符:

    " &quot; 
    ' &apos; 
    < &lt; 
    > &gt; 
    & &amp; 
    

    ,所以你需要預處理的功能,然後和另一個後期處理。即紙5嵌套REPLACE語句在UDF ...

    相關問題