如果我的XML文件具有与其关联的模式,则XSLT不起作用

如果我的XML文件具有与其关联的模式,则XSLT不起作用,xml,xslt,schema,xsd,Xml,Xslt,Schema,Xsd,如果我从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://w

如果我从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>

622-12-5748
亚力山大
市场
26
加州大学旧金山分校
Alexander@yahoo.com
这是我的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>

学生信息
SSN
名字

我犯了什么愚蠢的错误?提前谢谢

尝试在您的for-each-select中使用“xsi:Student/xsi:Student”

编辑: 在您的名字中也选择:“xsi:name/xsi:first name”

尝试在您的名字中使用“xsi:Students/xsi:Student”进行选择

编辑: 在您的名字中也选择:“xsi:name/xsi:first name”

我犯了什么愚蠢的错误?谢谢 提前

因为XML文档位于默认名称空间中,并且因为XML文档没有属于“无名称空间”的节点,所以任何XPath表达式中的任何未固定元素名称都不会选择任何内容

您已经开始使用带前缀的名称,但尚未完全使用

更改

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

           <xsl:for-each select="xsi:Students/xsi:Student"> 
<xsl:value-of select="xsi:Name/xsi:First-Name"/>

和更改:

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

           <xsl:for-each select="xsi:Students/xsi:Student"> 
<xsl:value-of select="xsi:Name/xsi:First-Name"/>

我犯了什么愚蠢的错误?谢谢 提前

因为XML文档位于默认名称空间中,并且因为XML文档没有属于“无名称空间”的节点,所以任何XPath表达式中的任何未固定元素名称都不会选择任何内容

您已经开始使用带前缀的名称,但尚未完全使用

更改

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

           <xsl:for-each select="xsi:Students/xsi:Student"> 
<xsl:value-of select="xsi:Name/xsi:First-Name"/>

和更改:

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

           <xsl:for-each select="xsi:Students/xsi:Student"> 
<xsl:value-of select="xsi:Name/xsi:First-Name"/>


问得好,+1。请参阅我的答案以了解解释和解决方案。最明显的“愚蠢错误”是
http://www.example.com
和源文档中的
http:/www.example.com
。除此之外,对
http://www.w3.org/2001/XMLSchema-instance
是完全合法的,但很可能会让读者感到困惑。哦,example.com引用之间的差异只是我在将问题翻译为StackOverflow时犯的一个错误。这不是我实际文档中的问题。不过迪米特里帮我弄明白了。感谢您提供关于不在名称空间中使用xsi的提示。在我多次尝试解决这个问题时,我曾尝试过这样做,因为它是模式文档中XMLSchema实例的前缀。我很高兴知道这是一个不恰当的使用,虽然。可能重复的好问题,+1。请参阅我的答案以了解解释和解决方案。最明显的“愚蠢错误”是
http://www.example.com
和源文档中的
http:/www.example.com
。除此之外,对
http://www.w3.org/2001/XMLSchema-instance
是完全合法的,但很可能会让读者感到困惑。哦,example.com引用之间的差异只是我在将问题翻译为StackOverflow时犯的一个错误。这不是我实际文档中的问题。不过迪米特里帮我弄明白了。感谢您提供关于不在名称空间中使用xsi的提示。在我多次尝试解决这个问题时,我曾尝试过这样做,因为它是模式文档中XMLSchema实例的前缀。我很高兴知道这是一个不适当的使用,虽然。可能重复的哦,老兄,谢谢你这么多。那完全正确。我感谢你的帮助!哦,老兄,非常感谢你。那完全正确。我感谢你的帮助!