2012-08-17 110 views
1

嗨去除XML元素我有一個這樣的XML:使用撒克遜的XQuery

<ns1:books><ns2:book category="WEB"><ns3:title lang="en">Learning XML</ns3:title> 
<ns3:author>Erik T. Ray</ns3:author><ns3:year>2003</ns3:year><ns3:price>39.95</price> 

使用撒克遜的XQuery我想刪除的NS3:author元素,任何人都可以讓我知道如何我這麼做?

我知道有一個FN:刪除(..)方法,但我不希望使用,因爲它需要一個整數作爲第二個參數

任何完整的代碼將非常感激

還有 與撒克遜我正面臨的錯誤,如

引起:net.sf.saxon.trans.StaticError:XQuery語法錯誤#... nt-node()external;複製$#溫度: 意外標記 「$」 超越查詢

的結束,我使用的XML

申報命名空間soapenv =「http://www.w3.org/2003/05/soap-envelope 「; declare namespace reg =「http://www.mycompany.com/internal/xsd/registrationservice」; 聲明命名空間reg1 =「http://www.mycompany.com/internal/xsd/registrationtypes」;

declare variable $RegistrationServiceRequest := <reg:RegistrationServiceRequest><reg1:RegistrationAttributes>  <reg1:Username>fdf</reg1:Username><reg1:Password>passwdfdford1</reg1:Password>  <reg1:Title>Mdfdfr</reg1:Title><reg1:FirstName>fdsfdsfsd</reg1:FirstName> 
      </reg1:RegistrationAttributes><reg1:AutoLogin> <reg1:AutoLogin1>trtrtrt</reg1:AutoLogin1></reg1:AutoLogin> 
     </reg:RegistrationServiceRequest>; 
     copy $temp := $RegistrationServiceRequest 
modify delete node $temp/reg1:AutoLogin 
return $temp 

,但是當我用它左巴工作得很好試過了,唯一的問題是與撒克遜和錯誤是在複製線

任何想法如何解決這一問題?

感謝 小號

回答

0

您可以使用XQuery Update做到這一點:

copy $n := $data modify delete node $n/ns2:book/ns3:author return $n 

你可以試試這個例子住在http://www.zorba-xquery.com/html/demo#JTJCK3mGQJgLav/2uOtgldoTYoM=

,或者使用XQuery的腳本刪除元素:

delete node $data/ns2:book/ns3:author; 
$data 

你可以tr y這個例子住在http://www.zorba-xquery.com/html/demo#QEuf9N5OLfD87WarBscHKrRrwm0=

+0

HI wcandillon,感謝您的回覆,我編輯了我的問題描述,請您看看並提出答案? – Suresh 2012-08-18 12:12:43

2

如果你想對文檔做一個小的修改,XQuery不是你最好的選擇。您可以使用XQuery更新來完成,也可以使用XSLT來完成。單獨使用XQuery可以實現,但非常麻煩。

+0

嗨邁克爾,如果我有xml的70行的長度,我只是想刪除/添加一個節點,這是更好的性能是它xquery或xslt? – Suresh 2012-08-18 11:30:00

+2

如果輸入是一個DOM,並且您想要現場修改它,那麼可能是XQuery更新。如果輸入是文件中的詞法XML,並且更新的文檔也是文件中的詞法XML(可能是XSLT)。 – 2012-08-21 18:48:37