我正在使用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">
非常感谢你的帮助
当你写
<x:set var="text" select="string($xml_cont//doc/text)"/>
string()
转换删除<text>
元素的所有内容,除了文本内容。参见string()和Element Nodes的字符串值部分。
我不知道jstl,所以我真的不能建议如何解决这个问题,但如果我不得不在黑暗中尝试删除string()
函数调用,看看它是否给出了一个信息错误消息。此外,由于您似乎只想复制<text>
的子节点,而不想复制<text>
本身,因此我会在XPath表达式的末尾添加/*
:
<x:set var="text" select="$xml_cont//doc/text/*"/>