поддержка local-name() в Collective.xdv

У меня есть сайт Plone 3.5, и я пытаюсь внедрить действие Simple Social FB Like для контента в теме коллективного.xdv. Функция FB Like встроена в XML-тег.

<fb:like></fb:like>

Я пытаюсь выбрать его XPATH через

//*[local-name()="like"]

Однако выхода я не вижу. Поддерживается ли вышеуказанное в коллективном.xdv? Есть ли другой способ выбрать тег fb:like в XPATH?


person h2o    schedule 07.04.2011    source источник


Ответы (2)


HTMLParser libxml2, используемый lxml и, следовательно, xdv/diazo, удаляет префиксы пространств имен, поэтому вы должны иметь возможность выбрать его с помощью «//like».

Вам нужно будет добавить некоторый код xslt, чтобы исправить эти теги, так как они должны отображаться так, чтобы работать:

<xsl:template match="activity|add-profile-tab|bookmark|comments|friendpile|like|like-box|live-stream|login-button|pronoun|recommendations|serverFbml|profile-pic|user-status">
  <xsl:element name="fb:{local-name()}" xmlns:fb="http://www.facebook.com/2008/fbml">
    <xsl:apply-templates select="@*|node()"/>
  </xsl:element>
</xsl:template>

Хотя xdv/diazo можно заставить работать с XMLParser, вам нужно будет убедиться, что вы добавили объявление xmlns:fb="..." в свой документ и что все ваши входные данные были действительными xhtml, что трудно обеспечить с помощью браузерные HTML-редакторы.

Лоуренс

person Laurence Rowe    schedule 08.04.2011
comment
Спасибо. Это работает, и я получаю теги ‹fb:like›отсутствующие элементы здесь‹/fb:like› с их атрибутами. Однако его дочерние элементы отсутствуют. Я подозреваю, что сейчас это другая проблема, и это может быть как-то связано с требованием продукта к javascript. Он работает с темой по умолчанию. - person h2o; 09.04.2011
comment
Привет @h2o! Вам удалось завести детей? Примете ли вы ответ как правильный и зададите новый вопрос? - person Davi Lima; 11.04.2012

aiui, это не то, как работает локальное имя. Вам нужно сопоставить тег с указанием пространства имен, а затем local-name() возвращает неполное имя. Я считаю, что //* возвращает только набор тегов узлов в пространстве имен по умолчанию.

Вы пробовали //fb:like? [Я знаю, это слишком просто — и я думаю, что это неправильно — но опять же, это просто :-) ]

person Auspex    schedule 08.04.2011
comment
Я не знаю, правильно ли это, потому что, если я его использую, коллективный.xdv ломает тему. Если я выберу его родительский узел, я просто получу пустой тег ‹like›‹/like›. - person h2o; 08.04.2011