Как получить смешанные дочерние элементы в виде текста (JDOM) - PullRequest
5 голосов
/ 29 апреля 2011

У меня есть 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 голосов
/ 29 апреля 2011

Я бы сказал, что вы должны изменить свой документ на

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

, чтобы придерживаться спецификации XML.В противном случае <i> будет считаться дочерним элементом <documentation>, а не содержимым.

0 голосов
/ 07 октября 2013

В псевдокоде 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() 

Тем не менее, как Прашант Бхате написал : content.getText () дает немедленный текст, который полезен только с листовыми элементами с текстовым содержимым.

0 голосов
/ 29 апреля 2011

Иерихон HTML отлично подходит для такого рода задач.Вы можете точно выполнить то, что пытаетесь сделать с помощью блока кода, например:

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

Он также отлично подходит для работы с HTML в целом, потому что он не пытается заставить его быть XML ...it занимается этим гораздо снисходительнее.

...