0

XML ファイルを HTML 表形式で表示するための XSL ファイルを作成しましたが、機能しません。ヘッダーのみを表示していuriますliteral。親切に私のコードを調べて、解決策を返信してください。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="UTF-8"/>
  <xsl:template match="/">
    <html>
      <head>
        <title>Query</title>
      </head>
      <body>
        <table width="100%" border="1">
          <THEAD>
            <TR>
              <TD width="35%">
                <B>URI</B>
              </TD>
              <TD width="15%">
                <B>Literal</B>
              </TD>
            </TR>
          </THEAD>
          <TBODY>
            <xsl:for-each select="sparql/results/result">
              <TR>
                <TD width="35%">
                  <xsl:value-of select="uri" />
                </TD>
                <TD width="15%">
                  <xsl:value-of select="literal" />
                </TD>
              </TR>
            </xsl:for-each>
          </TBODY>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

私の入力は次のとおりです。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
  <head>
    <variable name="c1"/>
    <variable name="callret-1"/>
  </head>
  <results>
    <result>
      <binding name="c1">
        <uri>http://dbpedia.org/resource/SVIST</uri>
      </binding>
      <binding name="callret-1">
        <literal>
          Swami Vivekananda &lt;b&gt;Institute&lt;/b&gt; &lt;b&gt;of&lt;/b&gt; Science and      &lt;b&gt;Technology&lt;/b&gt;, a non profit making trust has been set up to... the technological and professional institution &lt;b&gt;of&lt;/b&gt; high standards and to encourage research and... In this era &lt;b&gt;of&lt;/b&gt; economic...
        </literal>
      </binding>
    </result>
    <result>
      <binding name="c1">
        <uri>http://dbpedia.org/resource/Haldia_Institute_of_Technology</uri>
      </binding>
      <binding name="callret-1">
        <literal>
          &lt;b&gt;Haldia&lt;/b&gt; &lt;b&gt;Institute&lt;/b&gt; &lt;b&gt;of&lt;/b&gt; &lt;b&gt;Technology&lt;/b&gt;.
        </literal>
      </binding>
    </result>
  </results>
</sparql>
4

2 に答える 2

2

入力ドキュメントと一致させるには、スタイルシートで XML 名前空間を使用する必要があります。

入力ドキュメントは、デフォルトの名前空間を使用しています

http://www.w3.org/2005/sparql-results#

この名前空間を (接頭辞付きで) 明示的に参照しないセレクターは機能しませ

このようにスタイルシートに名前空間を追加する必要があります

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:spa="http://www.w3.org/2005/sparql-results#">

(任意のプレフィックスを使用できることに注意してください。)

次に、このプレフィックスを使用するように XPath セレクターを変更します。

<xsl:for-each select="spa:sparql/spa:results/spa:result">
    <TR>    
       <TD width="35%"><xsl:value-of select="spa:uri" /></TD>   
       <TD width="15%"><xsl:value-of select="spa:literal" /></TD> 
    </TR>
</xsl:for-each>

また、インデントを使用し、HTML 要素が小文字であることに注意してください。

于 2013-04-11T18:35:42.623 に答える
0

Harpo の言う通り、XSLT 内に名前空間を含め、それに応じて XPATH を変更するだけです。私はあなたのためにこれをしました:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:sq="http://www.w3.org/2005/sparql-results#">
  <xsl:output method="html" encoding="UTF-8"/>
  <xsl:template match="/">
    <html>
      <head>
        <title>Query</title>
      </head>
      <body>
        <table width="100%" border="1">
          <THEAD>
            <TR>
              <TD width="35%">
                <B>URI</B>
              </TD>
              <TD width="15%">
                <B>Literal</B>
              </TD>
            </TR>
          </THEAD>
          <TBODY>
            <xsl:for-each select="sq:sparql/sq:results/sq:result">
              <TR>
                <TD width="35%">
                  <xsl:value-of select="sq:binding/sq:uri" />
                </TD>
                <TD width="15%">
                  <xsl:value-of select="sq:binding/sq:literal" />
                </TD>
              </TR>
            </xsl:for-each>
          </TBODY>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
于 2013-04-12T05:50:06.193 に答える