XSL document()函数没有获取任何数据

时间:2011-06-21 16:14:14

标签: xml xslt document foaf

我正在开发一个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 :(得分:0)

跨域XSLT总是存在一些问题。有时他们根本不工作或只是在特定浏览器中工作。

我找到了firefox的错误报告。似乎不允许跨域document(): https://bugzilla.mozilla.org/show_bug.cgi?id=353886

然而,似乎有使用这个Javascript库之一的解决方法:JQuery转换或Sarissa。

详细解答请看这里:
XSLT using JavaScript Example