libxml2 получает внутренний (X) HTML

#objective-c #ios #xhtml #libxml2

#objective-c #iOS #xhtml #libxml2

Вопрос:

У меня есть несколько примеров данных XHTML, например, это:

 <html>
    <head>
        <style type="text/css">
            ..snip
        </style>
        <script type="text/javascript" src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.js"></script>
    </head>
    <body>
        <div id="contentA">
             This is sample content <b> that is bolded as well </b>
        </div>
    </body>
</html>
  

Теперь, что мне нужно сделать, это с помощью xmlNode * получить внутренний HTML-код div contentA . У меня есть xmlNode * для этого, но как я могу получить для этого InnerXml? Я просмотрел содержимое, но оно возвращает только This is sample content , а не xml в тегах, выделенных жирным шрифтом. Я изучил jQuery это, но из-за ограничений Apple и JavaScript я не могу использовать jQuery для получения InnerXml этого узла.

С другой стороны, есть ли другая библиотека, которую я должен использовать для получения внутреннего XML? Я заглянул в TBXML, но там была та же проблема.

Ответ №1:

Содержимое узла div не является отдельной текстовой строкой. Вероятно, он состоит из:

  1. Текстовый узел, содержащий This is sample content (с предыдущей новой строкой).
  2. элемент node с именем тега b
  3. Текстовый узел, содержащий завершающую новую строку и отступ до закрывающего тега div .

Узел элемента для <b>...</b> будет иметь текстовое содержимое that is bolded as well .

Чтобы получить весь текст в div в виде одной строки, вам нужно рекурсивно спуститься по всему дереву дочерних узлов в поисках текстового содержимого.

Комментарии:

1. По сути, мне нужна строка: This is sample content <b> that is bolded as well </b> вот и все, больше ничего не требуется. Как я могу получить эту строку.

2. Вам все еще нужно выполнить итерацию по узлам. Когда вы дойдете до <b> элемента, вставьте текст «<b>» в строку, а когда вы закончите с этим элементом, вставьте «</b>» в строку.

3. У меня такое чувство, что мог бы быть более простой способ сделать это, потому что при таком подходе необходимо поддерживать порядок свойств, таких тегов, как этот: <tag> Этот имеет <b> прерывистое</b> выделение жирным шрифтом </tag>. В принципе, все, что мне нужно, это диапазон XML-div. Как я могу это получить?

4. @Ричард Дж. Росс III: <b>...</b> это XML-элемент, и все. Нет способа заставить анализатор XML волшебным образом игнорировать части структуры XML.

5. @JeremyP : вы правы! Я был УВЕРЕН, что это не разрешено в XML. Ты научил меня чему-то важному! спасибо. Я удалил свой бесполезный и неправильный ответ.