2016-01-13 44 views
2

這裏一個新的XML元素 一個開放的XML文檔中替換 元素是XML文檔的樣本之前,我跑我的XQuery:

<?xml version="1.0" encoding="UTF-8" standalone='yes'?> 
<w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"> 
    <w:body> 
    ... 
<w:p w:rsidR="00BB265E" w:rsidRDefault="00BB265E"> 
    <w:pPr> 
    <w:pStyle w:val="DefaultText"/> 
    <w:ind w:left="720" w:hanging="720"/> 
    </w:pPr> 
    <w:r> 
    <w:t>1.7</w:t> 
    </w:r> 
    <w:r> 
    **<w:tab/>** 
    </w:r> 
    <w:r w:rsidRPr="001C1D1B"> 
    <w:rPr> 
     <w:shd w:val="clear" w:color="auto" w:fill="FABF8F"/> 
    </w:rPr> 
    <w:t>Member means any person who is enrolled in</w:t> 
    </w:r> 
... 

下面是一些我嘗試了XQuery查詢運行:

查詢1

UPDATE XML_TORTEST 
    SET XMLDOC = updateXML(XMLDOC,'declare namespace w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"; /w:document/w:body/w:p/w:r/w:tab', 
        XMLType('<w:t> </w:t>')) 
    WHERE XML_TORTEST_ID = 1 
AND XMLExists('$p/w:document/w:body/w:p/w:r/w:tab' 
        PASSING XMLDOC AS "p");  

這給出了這樣的錯誤:

SQL錯誤:ORA-31013:無效的XPATH表達式 31013. 00000 - 「無效的XPATH表達式」 *原因:傳遞給函數的XPATH表達式無效。 *操作:檢查xpath表達式是否有可能的語法錯誤。我想與使用XQuery

查詢2 - 工作,但XML輸出不正確(不是真的)

UPDATE XML_TORTEST po 
    SET po.XMLDOC = 
    XMLQuery('declare namespace w="http://schemas.openxmlformats.org/wordprocessingml/2006/main";  
       copy $i := $p1 
       modify 
       (
      for $j in $i/w:document/w:body/w:p/w:r/w:tab 
      let $newn := ''<w:t> </w:t>'' 
      return replace node $j with $newn) 
      return $i' PASSING po.XMLDOC AS "p1" 
      RETURNING CONTENT) 
WHERE XML_TORTEST_ID = 1 
AND XMLExists('declare namespace w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"; $p/w:document/w:body/w:p/w:r/w:tab' 
       PASSING po.XMLDOC AS "p"); 

下面是示例XML後,我跑了查詢2:

<w:p w:rsidR="00BB265E" w:rsidRDefault="00BB265E"> 
     <w:pPr> 
     <w:pStyle w:val="DefaultText"/> 
     <w:ind w:left="720" w:hanging="720"/> 
     </w:pPr> 
     <w:r> 
     <w:t>1.7</w:t> 
    </w:r> 
    **<w:r>&lt;w:t&gt; &lt;/w:t&gt;</w:r>** 
    <w:r w:rsidRPr="001C1D1B"> 
    <w:rPr> 
     <w:shd w:val="clear" w:color="auto" w:fill="FABF8F"/> 
    </w:rPr> 
    <w:t>Member means any person who is enrolled in</w:t> 
    </w:r> 
    .... 

任何幫助的&lt;w:t&gt; &lt;/w:t&gt;轉換到<w:t> </w:t>表示讚賞。

回答

0

嘗試let $newn := <w:t> </w:t>而不是let $newn := ''<w:t> </w:t>''

+0

如果我刪除了',改變$ newn:= 被替換爲沒有。 – tstorli

0

你要加魔法字(#ora:invalid_path empty #)更多信息here款「甲骨文的XQuery拓表達編譯指示」

UPDATE XML_TORTEST po 
    SET po.XMLDOC = 
    XMLQuery(' 
      declare namespace w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"; 
       (#ora:invalid_path empty #){ 
       copy $i := $p1 
       modify 
       (
      for $j in $i/w:document/w:body/w:p/w:r/w:tab 
      let $newn := <w:t></w:t> 
      return replace node $j with $newn) 
      return $i 
      } 
      ' PASSING XMLDOC AS "p1" 
      RETURNING CONTENT); 
+0

我嘗試了上面的更新語句,但沒有運氣。它創建一個空的文本節點。這樣' 1.7 '我需要一個有一個空間字符在裏面。 – tstorli

+0

我可以創建一個節點,但前提是我需要在其中添加一個值。就像這樣:'UPDATE XML_TORTEST婆... ... 讓 $ newn:= ### 回報替換$ newn節點$ j)的 迴歸$ I}」 PASSING po.XMLDOC AS 「P1」 返回內容) WHERE XML_TORTEST_ID = 1 ...'但現在我必須找到一種方法來刪除###個字符,以便只剩下空間。 – tstorli

+0

'select xmlquery('let $ spaceChar:=「 」return {$ spaceChar}'returns content)from dual;'試試這個。也許你可以從代碼中刪除(#ora:invalid_path empty#) –