Разбор / объединение вложенных значений HTML-элементов в исходном порядке. - PullRequest
2 голосов
/ 08 сентября 2011

Я хотел бы знать, как вы можете анализировать содержимое блока HTML и в то же время поддерживать порядок строк, отображаемых в документе HTML, используя this (Hpple) упаковщик, которыйработает с выражениями XPath.Среда - iOS.

Пример:

<html>
<body>
<div>
Lorem ipsum <a href="...">dolor</a> sit <b>amet,</b> consectetur
</div>
</body>
</html>

Допустим, мы хотим проанализировать все строки внутри тега <div> в исходном порядке, чтобы получить следующий результат:

Lorem ipsum dolor sit amet, consectetur

Камнем преткновения является поддержание порядка строк.Легко получить все прямое содержимое <div>, а также <a> и <b> отдельно или одновременно, используя выражение XPath, которое, однако, пропускает порядок, поэтому может привести к размещению содержимого <a> и <b> в конце строки.

Как этого добиться, используя выражение XPath с упомянутой оболочкой?

Обновление:

Одним из способов достижения этого с упомянутыми оберткой и платформой (особенно libxml2), по-видимому, является следующее выражение XPath:

//div/descendant-or-self::*/text()

Однако полученные элементы разделяются и не доставляются как одна строка, так чтосоединяться вручную.

1 Ответ

4 голосов
/ 08 сентября 2011

Если Hpple совместим с XPath, то он должен иметь возможность оценить это выражение :

string(/*/body/div)

Это выражение XPath оценивается как строковое значение первого (в порядке документа /*/body/div элемент (в вашем случае есть только один такой элемент).

По определению строковое значение узла является объединением всех его потомков текстовых узлов (в порядке документа), и, таким образом, этот результат является именно той строкой, которую вы запросили.

Проверка на основе XSLT :

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
  <xsl:value-of select="/*/body/div"/>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML :

<html>
    <body>
        <div> Lorem ipsum 
            <a href="...">dolor</a> sit 
            <b>amet,</b> consectetur 
        </div>
    </body>
</html>

дает желаемый, правильный результат :

 Lorem ipsum 
            dolor sit 
            amet, consectetur 
...