2012-08-17 109 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