2017-01-02 18 views
0

「位置」で「番号」の値を並べ替えるか、最初にT.number値のXML文書に入って表示したいと思います。これを行う方法はありますか?ここでXSLノードの位置で番号を並べ替える

は私のXML文書である

<?xml version="1.0" encoding="UTF-8"?> 
<JobList> 
<Job ID="2" />     
<Job ID="3" />     
<Job ID="5" />     
<Job ID="4" /> 
<Job ID="6" />     
<Job T.number="28" />     
<Job T.number="10" />     
<Job T.number="24" />     
<Job T.number="75" /> 
<Job T.number="75" />     
<Tool number="10" /> 
<Tool number="24" /> 
<Tool number="28" /> 
<Tool number="75" /> 
<Tool number="75" /> 
</JobList> 

望ましい結果:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" encoding="UTF-8" method="xml" /> 
<xsl:param name="REPORT">joblist</xsl:param> 
<xsl:param name="LOCALE">en-US</xsl:param> 
<xsl:param name="FORMAT">html</xsl:param> 
<xsl:param name="CAPTURE">example,job</xsl:param> 
<xsl:template match="/"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
<title>Joblist Report</title> 
<style type="text/css"> 
body {font-family: Arial;} 
</style> 
</head> 
<body> 
<xsl:apply-templates /> 
</body> 
</html> 
</xsl:template> 
<xsl:template match="JobList"> 
<div> 
<table width="100" border="1"> 
<thead> 
<tr> 
<td> 
<xsl:value-of select="Sorted Numbers" /> 
</td> 
</tr> 
</thead> 
<tbody> 
<xsl:variable name="vsortOrder" select="//Job[@T.number]" /> 
<xsl:for-each select="Tool">      
<xsl:sort select="@number" order="{$vsortOrder}" data-type="number" /> 
<tr> 
<td> 
<xsl:value-of select="@number" /> 
</td> 
</tr> 
</xsl:for-each> 
</tbody> 
</table> 
</div> 
</xsl:template> 
</xsl:stylesheet> 

UPDATE:私は同じを持っている属性を発見した。ここ

<?xml version="1.0" encoding="UTF-8"?> 
<JobList> 
<Job ID="2" />    
<Job ID="3" />    
<Job ID="5" />     
<Job ID="4" /> 
<Job ID="6" />     
<Tool number="28" /> 
<Tool number="10" /> 
<Tool number="24" /> 
<Tool number="75" /> 
</JobList> 

は、XSL文書であります私が必要とする注文番号。私はその属性でXMLを更新しました。しかし、XSLはまだそれを並べ替えることはありません。

+0

必要な変換の背景にある論理を説明してください。 –

+0

ロジックは、ユーザーが操作の順にツーリングを作成するためのものです。 XSLがアクセントまたはディケンディングによって組織化するとき、それはツールが実行する順序ではなく、次に何が来るのかを知ることをより困難にします。 –

+0

私はあなたが私の質問を誤解してしまうのではないかと心配しています。なぜ最初に28、10秒、24秒、そして75が最後になるのかを説明してください。 1つは**ルール**はここで適用する必要がありますか? –

答えて

1

希望する出力は、実際のコードが生成する出力と大きく異なります。しかし、多分これがあなたを助けるでしょう。このコードはあなたの望む出力を得ます。次に、実際に必要なものに変更することができます。

<!-- Change your for-each loop. --> 
<xsl:for-each select="$vsortOrder/@T.number">      

    <xsl:variable name="tnumber" select="."/> 

    <xsl:copy-of select="//Tool[@number=$tnumber]"/> 

</xsl:for-each> 

または、これを行うためにコードを変更することができます。番号を印刷するだけなので、ツールをルックアップする必要はありません。

<!-- Change your for-each loop. --> 
<xsl:for-each select="$vsortOrder/@T.number">      
    <tr> 
    <td> 
     <xsl:value-of select="." /> 
    </td> 
    </tr> 
</xsl:for-each> 
+0

ありがとうございました。私は1つの問題に遭遇しました。私が同じT.Number Nodeを持っていれば、両方のノードが表示されます。そのうちの1つだけを表示し、両方を表示する方法はありませんか? T.number = 75 –

+0

で例を示すためにもう一度質問を更新しました。@ T.numberという別個のリストを選択し、その代わりにそれをループすることでこれを行うことができます。ここでそれを羽ばたくだけですが、次のようになります: Bluewood66

関連する問題