我有类似以下的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吗?或者有更好的选择吗?
答案 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>
的子元素,而不是内容。