Jstl:解析包含子标记的xml节点内容

时间:2014-07-23 19:54:48

标签: xml xpath jstl xslt-1.0

我正在与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>

如何保留子节点而不是将所有节点转换为纯文本?我在互联网上找不到任何东西。

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

 <div class="author">

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

写作时

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

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

我不知道jstl,所以我无法就如何解决这个问题提出建议,但如果我不得不在黑暗中刺伤我会尝试删除{{1函数调用并查看它是否提供了信息性错误消息。此外,由于您似乎只想复制string()而不是<text>本身的子项,因此我会在XPath表达式的末尾添加<text>

/*