使用XPath保留文本中的元素

时间:2016-06-24 10:40:03

标签: java html xml xpath

我有一个XML文件,每个文件都包含一些信息,它还包含在元素<namespace:description></namespace:description>中关闭的自身描述。此说明将插入HTML网页并上传到网络。

问题是在description元素中是其他HTML元素,我想将它们保留在那里,以便可以格式化文本,但XPath会转义所有这些元素并仅返回它们的文本。

<namespace:descr>Some <i>nice</i> description</namespace:descr>

我在此XPath查询中尝试了各种变体://*[local-name()='descr'] (我对XPath并不熟练)

还尝试了this answer中找到的//*[local-name()='descr']//*[not(descendant::*[self::p or self::i])]之类的内容,但它对我不起作用。

所以我的问题是:在使用XPath查询后,有没有办法在文本中保留XML / HTML元素?

1 个答案:

答案 0 :(得分:3)

XPath表达式的返回值可以是字符串,数字,布尔值或节点集。这些类型中的每一种都可以转换为其中一种基本类型。

表达式//*[local-name()='descr']返回一个节点集,但你显然将它转换为一个字符串,该字符串返回节点集中第一个节点的连接文本内容,剥离所有标记。

要将结果节点的内容打印为标记,您需要执行以下操作:

  1. 将表达式结果检索为node-set。节点集的实现类型取决于XPath引擎,例如可以是DOM节点列表。
  2. 将节点序列化为XML片段。这当然取决于API节点集和XPath引擎。可以使用XSLT,但它也可以像在节点实现上调用toString()一样简单。