【问题标题】:XML + XSL - Doesn't display correctXML + XSL - 显示不正确
【发布时间】:2013-10-11 05:33:51
【问题描述】:

我阅读了其他问题。文件看起来很相似,所以我不知道,这里有什么问题......

这是我的 XML:

<?xml version="1.0" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="/Projekt1.xsl"?>
<x:projekte xmlns:x="urn:Projekt1">
    <person id= "1">
        <name>Franz Mommar</name>
        <link>http://pd.zhaw.ch/portraet/images/</link>
        <zhaw>mino.jpg</zhaw>
        <googlemapsx>285.2342</googlemapsx>
        <googlemapsy>234.3598</googlemapsy>
        <facebook>franzmoammar</facebook>
        <skype>franz.moammar</skype>
        <twitter>franzmoammar</twitter>
    </person>
    <person id= "2">
        <name>Rüdiger Mannheim</name>
        <link>http://www.poese.org/wp-content/uploads/2010/07/</link>
        <zhaw>AWNEX74E.jpg</zhaw>
        <googlemapsx>45.2342</googlemapsx>
        <googlemapsy>32.3598</googlemapsy>
        <facebook>franzmoammar</facebook>
        <skype>franz.moammar</skype>
        <twitter>franzmoammar</twitter>
    </person>
</x:projekte>

这是 xsl:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <body>
                <table border="1">
                    <tr>
                        <th>Name</th>
                        <th>X-Coordinate</th>
                        <th>Y-Coordinate</th>
                        <th>Facebook</th>
                        <th>Skype</th>
                        <th>Twitter</th>
                        <th>Bild</th>
                    </tr>
                    <xsl:for-each select="projekte/person">
                    <tr>
                        <td><xsl:value-of select="name"/></td>
                        <td><xsl:value-of select="googlemapsx"/></td>
                        <td><xsl:value-of select="googlemapsy"/></td>
                        <td><xsl:value-of select="facebook"/></td>
                        <td><xsl:value-of select="skype"/></td>
                        <td><xsl:value-of select="twitter"/></td>
                        <!--<td><src href="{link}{zhaw}"/></td>-->
                    </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

我从几个小时以来一直在尝试处理这些文件,但我没有找到解决方案。

我右键单击 XML -> 打开方式 -> Firefox

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    命名空间可能是您的问题。在您的 XML 中,projekte 元素位于命名空间“urn:Projekt1”

    <x:projekte xmlns:x="urn:Projekt1">
    

    但是在您的 XSLT 中没有对命名空间的引用,因此它在没有命名空间中寻找 projekte 元素,因此不会匹配在命名空间中的元素。

    解决方案是在 XSLT 中声明命名空间

    <xsl:stylesheet version="1.0" 
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
                    xmlns:x="urn:Projekt1" exclude-result-prefixes="x">
    

    然后在匹配元素时在你的xpath表达式中使用前缀

    <xsl:for-each select="x:projekte/person">
    

    如果输出中没有实际元素使用命名空间,“exclude-result-prefixes”用于停止输出 XML,包括命名空间声明。

    或者,您可以只在 xpath 表达式中使用通配符,这样您就不必担心声明命名空间

    <xsl:for-each select="*/person">
    

    【讨论】:

    • 谢谢伙计!大大大大谢谢!这做到了! :) 但是:我不得不在 for-each 循环中使用“*/person”而不是“x:/projekte/person”,因为这个不起作用。 :) 问候特鲁德勒
    • 您的评论中可能有错字,但应该是“x:projekte/person”而不是“x:/projekte/person”。你那里有一个流氓斜线......
    【解决方案2】:

    如果您在源代码中使用'/Project,它假定在当前驱动器的根目录中查找,只需在xml文件的源代码中使用Projekt1.xsl,即不带/

    【讨论】:

    • 感谢您的回答! :) 我都试过了,结果不同。使用“/”我得到没有结构的内容,否则我只得到表格的标题。不知道那里有什么问题。问候
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多