XML-файл показывает только данные с DTD, а не XSLT - PullRequest
0 голосов
/ 24 февраля 2019

Может быть, вы можете помочь мне с этой проблемой.У меня есть XML-файл с xsl и xsd прикрепленным к нему.Тем не менее, моя информация из xsl не загружается вообще.Это работает, только когда я связываю свой XML-файл с dtd, но не с xsl.Ребята, можете ли вы помочь мне с этим?Заранее спасибо.

Так выглядит мой xml-файл.

<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type='text/xsl' href='wishlist.xsl'?>
<coins 
    xmlns="https://www.w3schools.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://student.mccinfo.net/~armatsumura/wishlist.xsd">>
   <wish_list> 
        <coin_id>SGB123</coin_id>
        <issue_date>hi</issue_date>
        <category>American</category>
        <type>Antique</type>
        <value>$2000</value>
    </wish_list>
</coins>

Это мой xsd файл

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://student.mccinfo.net/~armatsumura/wishlist.xsd"
  xmlns="http://student.mccinfo.net/~armatsumura/wishlist.xsd"
  elementFormDefault="qualified">  
  <xs:element name="coins">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="wish_list"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="wish_list">
    <xs:complexType>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="coin_id"/>
        <xs:element ref="issue_date"/>
        <xs:element ref="category"/>
        <xs:element ref="type"/>
        <xs:element ref="value"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="coin_id" type="xs:string"/>
  <xs:element name="issue_date" type="xs:string"/>
  <xs:element name="category" type="xs:string"/>
  <xs:element name="type" type="xs:string"/>
  <xs:element name="value" type="xs:string"/>
</xs:schema>

Это мой XSLT

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <head>
                <title>Wishlist</title>
                <link rel="stylesheet" href="coins.css"/>
            </head>
            <body>
                <ul>
                    <li><a href="http://student.mccinfo.net/~armatsumura/home.htm">Home</a></li>
                    <li><a href="http://student.mccinfo.net/~armatsumura/inventory.xml">Inventory</a></li>
                    <li><a href="http://student.mccinfo.net/~armatsumura/wishlist.xml">Wishlist</a></li>
                    <li><a href="http://student.mccinfo.net/~armatsumura/insurance.xml">Insurance</a></li>
                    <li><a href="http://student.mccinfo.net/~armatsumura/vendor.xml">Vendors</a></li>
                    <li><a href="mailto:armatsumura@mail.mccneb.edu">armatsumura.mail@mccneb.edu</a></li>
                </ul> 
                <center><h2>Wishlist</h2></center>
                <center><table border="1">
                    <tr bgcolor="#ffffff">
                        <th style="text-align:center">Coin ID</th>
                        <th style="text-align:center">Issue Date</th>
                        <th style="text-align:center">Category</th>
                        <th style="text-align:center">Type</th>
                        <th style="text-align:center">Value</th>
                    </tr>
                    <xsl:for-each select="coins/wish_list">
                        <tr>
                            <td><xsl:value-of select="coin_id"/></td>
                            <td><xsl:value-of select="issue_date"/></td>
                            <td><xsl:value-of select="category"/></td>
                            <td><xsl:value-of select="type"/></td>
                            <td><xsl:value-of select="value"/></td>
                        </tr>
                    </xsl:for-each>
                </table></center>
            </body>
        </html>
        
        
    </xsl:template>    
    
</xsl:stylesheet>

1 Ответ

0 голосов
/ 25 февраля 2019

Несколько вещей ..

Если вы тестируете это в браузере, таком как FireFox, то ваш XML должен соответствовать спецификации XPath 1.0.Вы можете прочитать об этом здесь: Какие браузеры поддерживают Xpath 2.0?

В соответствии с ссылкой выше, ваша декларация должна выглядеть следующим образом, обратите внимание на изменение в первом пространстве имен, теперь это xmlns:CS.Это обеспечит префикс пространства имен.Кроме того, у вас есть дополнительное «>», возможно, вы захотите удалить это:)

<coins 
    xmlns:cs="https://www.w3schools.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://student.mccinfo.net/~armatsumura/wishlist.xsd">

Затем в вашем XSLT вы можете добавить пространство имен «с префиксом», чтобы XSLT выглядел так, снова обратите внимание наНовая строка для префиксного пространства имен

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:cs="https://www.w3schools.com">

Далее следует выбрать корневой селектор / *, чтобы он выбрал все под корнем, вы также можете заменить / * на имя корневого, но этоличные предпочтения типа вещей.

<xsl:template match="/*">

Наконец, я не думаю, что XSD имеет отношение к этому вопросу, XSD используется для проверки правильности вашего XML-файла, содержит ли он необходимые элементы, правильны ли типы данных, так далее;но я не вижу ничего подобного в вашем определении XSL.

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...