如何将元素混合子元素检索为文本(JDOM)

时间:2011-04-29 14:15:51

标签: java xml jdom

我有类似以下的XML:

<documentation>
    This value must be <i>bigger</i> than the other.
</documentation>

使用JDOM,我可以得到以下文本结构:

Document d = new SAXBuilder().build( new StringReader( s ) );
System.out.printf( "getText:          '%s'%n", d.getRootElement().getText() );
System.out.printf( "getTextNormalize: '%s'%n", d.getRootElement().getTextNormalize() );
System.out.printf( "getTextTrim:      '%s'%n", d.getRootElement().getTextTrim() );
System.out.printf( "getValue:         '%s'%n", d.getRootElement().getValue() );

给出了以下输出:

getText:          '
    This value must be  than the other.
'
getTextNormalize: 'This value must be than the other.'
getTextTrim:      'This value must be  than the other.'
getValue:         '
    This value must be bigger than the other.
'

我真正想要的是将元素的内容作为字符串,即"This value must be <i>bigger</i> than the other."getValue()已关闭,但会删除<i>标记。我想我想要一些像innerHTML这样的XML文档...

我应该在内容上使用XMLOutputter吗?或者有更好的选择吗?

3 个答案:

答案 0 :(得分:0)

在JDOM伪代码中:

for Object o in d.getRootElement().getContents()
   if o instanceOf Element
      print <o.getName>o.getText</o.getName>
   else // it's a text
      print o.getText() 

但是,正如Prashant Bhate wrote:content.getText()提供了即时文本,只有带有文本内容的叶元素才能使用。

答案 1 :(得分:-1)

Jericho HTML非常适合这类任务。您可以完全按照以下代码块完成您要执行的操作:

String snippet = new Source(html).getFirstElement().getContent().toString();

一般来说,使用HTML也很棒,因为它不会试图强迫它成为XML ......它更宽松地处理它。

答案 2 :(得分:-1)

我说你应该把你的文件改为

<documentation>
  <![CDATA[This value must be <i>bigger</i> than the other.]]>
</documentation>

为了遵守XML规范。否则,<i>将被视为<documentation>的子元素,而不是内容。