Функция XSL document () не получает никаких данных - PullRequest
0 голосов
/ 21 июня 2011

Я работаю над таблицей стилей XSL для просмотра файлов FOAF и не хочу показывать имена и (если есть) фотографии людей, которых знает человек.

Поскольку они могут изменить свою фотографию или имя, я хотел бы получить эту информацию из своего профиля, а не добавлять их вручную в мой профиль. Как я понял, функция document () загружает XML-файл и позволяет получать оттуда информацию, но какой бы синтаксис я ни использовал, мне кажется, что я не получаю никакой информации.

Я включил ниже несколько способов, которыми я пытался получить имя контакта, но ни один из них не возвращает никаких данных (некоторые возвращают ошибку, как отмечено в комментариях)

    <div id="contacts">
        <ul>
        <xsl:for-each select="rdf:RDF/foaf:Person/foaf:knows">
            <xsl:choose>
                <xsl:when test="foaf:Person/rdfs:seeAlso">
                    <li>
                        <xsl:variable name="url" select="foaf:Person/rdfs:seeAlso/@rdf:resource" /> <!--works!-->
                        <xsl:value-of select="$url"/> <!-- the url is correct-->
                        <xsl:copy-of select="document($url)" /> <!-- XML Parsing Error: no element found Location: http://www.someurl.com/me.rdf Line Number 1, Column 1:-->
                        <xsl:value-of select="document($url)/rdf:RDF/foaf:Person/foaf:name[@value=$value]"/> <!--no result-->
                        <xsl:value-of select="document($url)/rdf:RDF/foaf:Person/foaf:name"/> <!--no result-->
                        <xsl:value-of select="document(foaf:Person/rdfs:seeAlso/@rdf:resource)/rdf:RDF/foaf:Person/foaf:name"/><!--no result-->
                        <xsl:value-of select="document(foaf:Person/rdfs:seeAlso/@rdf:resource)/rdf:RDF/foaf:Person/foaf:name[@value=$value]"/><!--no result-->
                    <a>
                        <xsl:attribute name="href"> 
                            <xsl:value-of select="foaf:Person/rdfs:seeAlso/@rdf:resource"/></xsl:attribute><xsl:text>X</xsl:text>
                        <xsl:value-of select="document($url)/rdf:RDF/foaf:Person/foaf:name"/> <!--nor result-->
                    </a>
                    <!-- A link of an X is displayed, linking to the right foaf-profile-->
                    </li>
                </xsl:when>
                <xsl:otherwise>
                    <li><xsl:value-of select="foaf:Person/foaf:name"/></li>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
        </ul>
    </div>

Моя теория состоит в том, что по соображениям безопасности нельзя загружать данные из других XML-файлов в сети (эти файлы находятся на каком-то сервере в сети, а не локально). Если это так, есть ли способ обойти это и сообщить системе, что ему разрешено загружать этот файл?

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 09 июля 2011

У междоменных XSLT всегда есть некоторые проблемы. Иногда они вообще не работают или работают только в определенных браузерах.

Я нашел сообщение об ошибке для Firefox. Кажется, что междоменный документ () не разрешен: https://bugzilla.mozilla.org/show_bug.cgi?id=353886

Однако, кажется, есть обходной путь, использующий одну из следующих библиотек Javascript: JQuery transform или Sarissa.

Подробный ответ смотрите здесь:
XSLT с использованием примера JavaScript

...