XQuery-包括处理指令

时间:2018-07-10 13:01:13

标签: xml xquery saxon

我有一个具有以下结构的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

1 个答案:

答案 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 }

https://xqueryfiddle.liberty-development.net/pPgCcom