XSLT не работает, если с моим XML-файлом связана схема - PullRequest
1 голос
/ 30 апреля 2011

Если я удаляю определение схемы из своего XML, тогда мой XSLT работает, но я не могу заставить его работать с определенной схемой.Я знаю, что на этот вопрос уже ответили здесь , но я не могу заставить свою работу работать.У меня есть следующий XML-заголовок:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="student.xsl"?>
<Students xmlns="http:/www.example.com" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://www.example.com student.xsd">

<Student>
    <SSN>622-12-5748</SSN>
    <Name>
        <First-Name>Alexander</First-Name>
        <Last-Name>Mart</Last-Name>
    </Name>
    <Age>26</Age>
    <Institution>UCSF</Institution>
    <Email>Alexander@yahoo.com</Email>
</Student>
</Students>

Вот мой XSLT-файл:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fo="http://www.w3.org/1999/XSL/Format" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:fn="http://www.w3.org/2005/xpath-functions" 
xmlns:xsi="http://www.example.com">
<xsl:template match="/">
    <html>
        <body>
            <h2>Student Information</h2>
            <table border="1">
                <tr bgcolor="yellow">
                    <th>SSN</th>
                    <th>First Name</th>
                </tr>
                <xsl:for-each select="xsi:Students/Student">
                    <tr>
                        <td>
                            <xsl:value-of select="xsi:SSN"/>
                        </td>
                        <td>
                            <xsl:value-of select="xsi:Name/First-Name"/>
                        </td>
                    </tr>
                </xsl:for-each>
            </table>
        </body>
    </html>
</xsl:template>

Какую глупую ошибку я делаю?Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 30 апреля 2011

Какую глупую ошибку я совершаю?Заранее спасибо!

Поскольку документ XML находится в пространстве имен по умолчанию и поскольку документ XML не имеет узла, принадлежащего «пространству имен», любые имена элементов без префиксов в любых выражениях XPath ничего не выберут.

Вы начали использовать префиксные имена, но не полностью.

Изменить :

           <xsl:for-each select="xsi:Students/Student"> 

на

           <xsl:for-each select="xsi:Students/xsi:Student"> 

и измените:

<xsl:value-of select="xsi:Name/First-Name"/>

на

<xsl:value-of select="xsi:Name/xsi:First-Name"/>
1 голос
/ 30 апреля 2011

Попробуйте использовать «xsi: Students / xsi: Student» в своем выборе для каждого

Edit: И в вашем имени выберите также: "xsi: Имя / xsi: Имя"

...