2012-01-24 19 views
0

XSLTを使用してXMLをHTMLに変換しようとしています。この分野では、繰り返されるノード値を読み取る必要があります。この例では読み取りXSLTの繰り返しノードの値

このシナリオを検討して

<root> 
    <test> 
    <ID> 123 <</ID> 
    <Name> MyName </Name> 
    <Country> India </Country> 
    <Books> 
    <language> C </language> 
    <language> C++ </language> 
    <language> Java </language> 
    <language> XML </language> 
    </Books> 
</root> 

"言語" ノード以外

<xsl:value-of select="ID"> 

などのすべてのノード値を読み取ることができています。 私はC C++ Java XMLのような出力が必要です。

+0

xsl foreach、またはxslテンプレートが必要です。あなたが投稿したデータに基づいて、それぞれが仕事をするでしょう。 –

+0

あなたのxsltコードを投稿してください。あなたのためにそれを修正します:) –

答えて

0
<xsl:for-each select="Books/language"> 
<xsl:value-of select "." /> 
<xsl:text> </xsl:text> 
</xsl:for-each> 
2

使用

string(/*/*/Books) 

このXPath式は、任意の要素の子であるBooks要素(お使いの場合には一つだけあります)最初のstring valueに評価XMLドキュメントの一番上の要素の子です。要素の

定義により

string valueそのテキストノードの子孫の全ての(文書順に)連結です。

完全なコード

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:value-of select="string(/*/*/Books)"/> 
</xsl:template> 
</xsl:stylesheet> 

この変換を提供する上で適用される場合(ただし、整形なされる修正!!!)XML文書

<root> 
    <test> 
     <ID> 123 </ID> 
     <Name> MyName </Name> 
     <Country> India </Country> 
     <Books> 
      <language> C </language> 
      <language> C++ </language> 
      <language> Java </language> 
      <language> XML </language> 
     </Books> 
    </test> 
</root> 

XPath式が評価され、結果が出力されます

C C++ Java XML 
+0

それは完璧になるつもりだ! Upvote :) –

+0

ちょっとした幼児プログラマー、あなたは戻ってきました - あなたは大歓迎です。 :) –

+0

ありがとうございます:) –

0

は、ここでいくつかのポインタですが、Dimitrieが指摘したように、本当に、私は強くあなたのXMLが整形されていない、あなたがそのようhttp://www.w3schools.com/xsl/まず

としてまともなチュートリアルを労働時間を過ごすことをお勧めします。あなたのXSLTパーサーがこれについて動揺しなかったのは少し驚きです。あなたは決して閉じられていないオープニングTestタグとあなたの終わりのIdタグに余分な<を持っています。また、あなたの価値表現が適切に閉じられていない

次に、「この例では、すべてのノード値を読み取ることができます...」と言います。この種のことは、あなたはXSLTを書くことができるようにしようとしている場合、テンプレート一致ビットは意味:それは何のxsl理解することが重要です

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
<xsl:template match="/root"> 
    <xsl:value-of select="ID"/> 
</xsl:template>  
</xsl:stylesheet> 

:あなたのコードと私はそれは次のようになりますことを推測しています。 XSLTは、入力文書を出力文書に変換する規則を適用して、文書全体を処理します。

各段階で、ドキュメント内のどこを見ているかを知る必要があります。これは「コンテキスト」として知られています。上記のコードでは、/ rootに到達するとルールが適用されます。これは、山括弧の中に囲み物を持たないrootという山括弧内のものを意味します。

このコンテキストが与えられると、XSLT式はそれに関連しています。 DOSのディレクトリパスのようなものです。あなたが現在のディレクトリを知っていない限り、相対ファイルパスはあまり意味がありません。

あなたの例では、select = "ID"は現在のコンテキストの子であるIDタグの値、つまり/ root/IDを意味します。

あなたの質問はどのように言語要素でしたか。まあ、エンジンの文脈が/ rootの場合は、本を読んでから、言語に戻ってID /書籍/言語になるようにする必要があります。

XSLTを学ぶことをお勧めします。それは本当に難しいことではなく、XMLを処理するための非常に強力な言語です。

関連する問題