我有一个具有以下结构的xml
<?xml version="1.0" encoding="UTF-8"?>
<MYXML>
<?source-system-command name="abc"?>
<NAME></NAME>
<REQUEST>request</REQUEST>
</MYXML>
我想提取出请求标签-Xquery是/MYXML/REQUEST
,我得到<Request></Request>
标签
但是,现在我希望从MYXML剥离REQUEST标签
所以我正在寻找的输出是
<?xml version="1.0" encoding="UTF-8"?>
<MYXML>
<?source-system-command name="abc"?>
<NAME></NAME> >!-- NO REQUEST -->
</MYXML>
我编写了以下XQUERY-"/MYXML/*[not(self::REQUEST)]"
,但这过滤了处理指令<?source-system-command name="abc"?>
我想念什么?如何告诉XQUERY不过滤掉处理指令?
使用SAXON-HE 9
答案 0 :(得分:3)
使用/MYXML/*[not(self::REQUEST)]
仅选择元素节点,因此您至少需要/MYXML/node()[not(self::REQUEST)]
或(更多XPath 2/3,类似于XQuery并更接近普通语言的使用)/MYXML/(node() except REQUEST)
。但是请注意,所有这些尝试只会选择MYXML
根元素的那些子元素,而不会选择该根元素本身的子元素,您需要使用例如
<MYXML>{/MYXML/(node() except REQUEST)}</MYXML>
或
/*!element {name()} { node() except REQUEST }