2017-12-22 18 views
3

これは私の最初の質問です。 しかし、問題に直面することができます。私は与えられたxhtmlを持っていて、それから特定の情報を得る必要があります。ここでXPath:選択したタグから適切な値を得ることが難しい

は、これまでのところ、私のXSLファイルです:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="3.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xpath-default-namespace="http://www.w3.org/1999/xhtml"> 
    <xsl:output method="xml" indent="yes" encoding="UTF-8" 
     omit-xml-declaration="no" /> 
    <xsl:template match="html"> 
     <xsl:element name="Speisekarte"> 
      <xsl:attribute name="xsi:noNamespaceSchemaLocation" 
       namespace="http://www.w3.org/2001/XMLSchema-instance">Speiseplan_Mensa_Schema.xsd</xsl:attribute> 
      <xsl:for-each select=".//table[@class='table module-food-table']"> 
       <xsl:element name="Speisen"> 
        <xsl:element name="namen"> 
         <xsl:value-of select="./thead/tr/th[1]" /> 
        </xsl:element> 
        <xsl:for-each select="./tbody/tr"> 
         <xsl:element name="zutaten"> 
          <xsl:value-of select="./td" /> 
         </xsl:element> 
         <xsl:element name="preis"> 
          <xsl:element name="Studenten"> 
           <xsl:value-of select="./td[2]" /> 
          </xsl:element> 
          <xsl:element name="Mitarbeiter"> 
           <xsl:value-of select="./td[3]" /> 
          </xsl:element> 
          <xsl:element name="Gäste"> 
           <xsl:value-of select="./td[4]" /> 
          </xsl:element> 
         </xsl:element> 
        </xsl:for-each> 
       </xsl:element> 
      </xsl:for-each> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

私の問題は、要素 "zutaten" です。私は、このXHTMLファイルのうち、 "RahmsauceでHackbällchen" を取得する必要があります:

<tbody> 
        <tr> 
        <td style="width:70%"> 
         Hackbällchen in <sup>(R)</sup> Rahmsauce <sup>(9,G,A,I)</sup> 
         <div class="price hidden-sm hidden-md hidden-lg"> 
         <span>1,50&nbsp;&euro;</span><span>2,15&nbsp;&euro;</span><span>2,80&nbsp;&euro;</span> 
         </div> 
        </td> 
        <td class="hidden-xs" style="text-align:center"> 
         1,50&nbsp;&euro; 
        </td> 
        <td class="hidden-xs" style="text-align:center"> 
         2,15&nbsp;&euro; 
        </td> 
        <td class="hidden-xs" style="text-align:center"> 
         2,80&nbsp;&euro; 
        </td> 
        </tr> 
       </tbody> 

私が試した:私は、この与える

<xsl:value-of select="./td/text()" /> 

:Rahmsauce 1,50にHackbällchenを2,15€2,80 € または私は試しました:

<xsl:value-of select="./td/text()[not(self::div)]" /> 

これは私にエラーを与えます。

私は多くの異なることを試みました。あなたは私にこれを手伝ってもらえますか? 私の英語は私の問題を理解するのに十分なものだったと思っています。 ありがとうございます。

+1

XPathで不要な '。/'と似た、スタイルに関する注意。要素名が静的であれば、 'xsl:element'と' xsl:attribute'は、出力のように見やすいリテラル要素と属性コンストラクタに置き換えることができます。 ... ' –

答えて

1

したい式がこれです...

<xsl:value-of select="td[1]/text()" /> 

td/text()を行うことによっては、(./プレフィックスはこちら不要です)、あなたはすべてのtdのノードを取得し、これらすべてのノードの下にすべてのテキストされています。

1

最初の列に述部がありません。 XPath ./tdは、その行のすべてのtd要素を選択します。 xsl:value-ofを使用すると、選択したものの計算されたテキスト値が生成されます。これは、すべてのtd要素(ノードの子孫text()を含む)になります。これは、xsl:value-ofxsl:copy-ofに変更することで確認できます。

最初のtd列のtext()だけを使用する場合は、td[1]/text()を使用してください。

関連する問題