使用saxon xquery从xml中删除元素

时间:2012-08-17 16:09:36

标签: xml xquery saxon

嗨,我有一个像这样的xml:

<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>

使用Saxon xquery我想删除ns3:author元素,任何人都可以告诉我该怎么办?

我知道有一个fn:remove(..)方法,但我不想使用它,因为它需要一个整数作为第二个参数

非常感谢任何完整的代码

另外 与撒克逊人我面临的错误如

引起:net.sf.saxon.trans.StaticError:#... nt-node()external中的XQuery语法错误;复制$ temp#:     超出查询结束的意外标记“$”

我使用了xml

声明名称空间soapenv =“http://www.w3.org/2003/05/soap-envelope”; declare namespace reg =“http://www.mycompany.com/internal/xsd/registrationservice”; declare namespace 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

但是当我尝试使用zorba时,它工作正常,唯一的问题是撒克逊和错误是在副本行

知道如何解决这个问题吗?

由于 小号

2 个答案:

答案 0 :(得分:2)

如果您想对文档进行少量更改,XQuery不是您的最佳选择。您可以使用XQuery更新执行此操作,也可以使用XSLT执行此操作。单独使用XQuery是可行的,但非常麻烦。

答案 1 :(得分: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 Scripting删除元素:

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

您可以在http://www.zorba-xquery.com/html/demo#QEuf9N5OLfD87WarBscHKrRrwm0=

上试用此示例