【问题标题】:Jstl: parse xml node content including child tagsJstl:解析 xml 节点内容,包括子标签
【发布时间】:2014-07-23 19:54:48
【问题描述】:

我正在使用 JSTL,但我仍在学习。

我有一个这样的xml:

<doc>
    <header> my header </header>
    <text> 
        <p> first paragraph</p>
        <p> second paragraph</p>
        <author>my author</author>
        <p> third paragraph</p>
    </text>
</doc>

我需要从中创建以下 html:

 <div class="text"> 
     <p> first paragraph</p>
     <p> second paragraph</p>
     <author>my author</author>
     <p> third paragraph</p>
 </div>

我的代码如下:

<c:set var="xml_cont" value="${link.linkedObject.metadataAndContent}"/> //value is already valid xml

<x:set var="text" select="string($xml_cont//doc/text)"/>

<div class="text">${text}</div>

问题是这会清除 的所有子节点,保留内容而不是标签。

我得到的html是:

 <div class="text"> 
      first paragraph
      second paragraph
      my author
      third paragraph
   </div>

我怎样才能保留子节点而不是全部变成纯文本?我在互联网上找不到任何东西。

情况并非如此,但如果我想将“作者”子节点转为其他内容怎么办:例如:

 <div class="author">

非常感谢您的帮助。

【问题讨论】:

    标签: xml xpath jstl xslt-1.0


    【解决方案1】:

    当你写作时

    <x:set var="text" select="string($xml_cont//doc/text)"/>
    

    string() 转换会删除 &lt;text&gt; 元素的所有内容,文本内容除外。请参阅string()Element Nodes 的字符串值部分。

    我不知道 jstl,所以我不能真正建议如何解决这个问题,但如果我不得不在黑暗中尝试一下,我会尝试删除 string() 函数调用,看看它是否给出信息丰富的错误消息。此外,由于您似乎只想复制 &lt;text&gt; 的子代而不是 &lt;text&gt; 本身,因此我将在 XPath 表达式的末尾添加 /*

    <x:set var="text" select="$xml_cont//doc/text/*"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-12
      • 2016-11-12
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多