2017-11-13 5 views
0

私は大きなXMLファイルを取り込み、タグ付きの要素をいくつか取り出そうとしています。私はテンプレートマッチタグを使用して、私が望むサブクラスに入ることを考えました(サブクラスは正しい単語ではありませんが、RDF/OWLの観点からこのクラスに入っています)が、そのサブクラスにないもの。ここでは、コードは次のようになります。XSLT 1つのサブクラスのみからの翻訳?

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ns4:getCollectiveTaskResponse 
xmlns:ns1="http://sample.com/xsd/task/1.0" 
xmlns:ns2="http://sample.com/xsd/commonElements/1.0"  xmlns:ns3="http://sample.com/xsd/individualTask/1.0"  xmlns:ns4="http://sample.com/xsd/collectiveTask/1.0" 
xmlns:ns5="http://sample.com/xsd/handle" 
xmlns:ns6="http://sample.com/appinfo/1"> 
<ns4:collectiveTask> 
    <ns4:generalInformation> 
     <number>13</number> 
     <title>Quarterback</title> 
     <name>Dan Marino</name> 

    </ns4:generalInformation> 

     <junk>I don't want this</junk> 


</ns4:collectiveTask> 

     <junk>I don't want this either</junk> 
</ns4:getCollectiveTaskResponse> 

XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:ns1="http://sample.com/xsd/task/1.0" 
xmlns:ns2="http://sample.com/xsd/commonElements/1.0"  xmlns:ns3="http://sample.com/xsd/individualTask/1.0"  xmlns:ns4="http://sample.com/xsd/collectiveTask/1.0" 
xmlns:ns5="http://sample.com/xsd/handle" 
xmlns:ns6="http://sample.com/appinfo/1"> 

<xsl:template  match="/ns4:getCollectiveTaskResponse/ns4:collectiveTask/ns4:generalInformation" > 


Number:<xsl:value-of select="number"/> 
Title:<xsl:value-of select="title"/> 
Name:<xsl:value-of select="name"/> 


</xsl:template> 

</xsl:stylesheet> 

答えて

2

あなたはありませテンプレートマッチング/ので、これらが効果的のテンプレートを選択したノードにマッチしてますでXSLTのbuilt-in template rulesキック。子ノードだから最終的にあなたのjunkノードが選択され、組み込みのテンプレートはそれをファイルするテキストノードを出力します。

特定の問題を解決する方法はいくつかあります。あなたがそのようなノードがたくさんある場合は、... junkノードを無視する

<xsl:template match="junk" /> 

をテンプレートを追加したりすることができます、あなたはすべてのテキストノード

<xsl:template match="text()" /> 

を無視するようにテンプレートを追加したり、追加することができますその後、/とのテンプレートマッチングは、明示的に、私はラーグの外にアイテムの数が少ないを選択するOPの場合のために、あなたの第三の選択肢を好むに傾いている

<xsl:template match="/"> 
    <xsl:apply-templates select="ns4:getCollectiveTaskResponse/ns4:collectiveTask/ns4:generalInformation" /> 
</xsl:template> 

<xsl:template match="ns4:generalInformation"> 
Number:<xsl:value-of select="number"/> 
Title:<xsl:value-of select="title"/> 
Name:<xsl:value-of select="name"/> 
</xsl:template> 
+0

....あなたが望んでいただけのノードを選択しますe入力文書。 –

+0

3つ目のオプション(名前空間を保持してコードを使用しました)を試みましたが、 "<?xml version =" 1.0 "encoding =" UTF-16 "?>"以外のものは取得できませんでした。私が紛失しているものがありますか? –

+0

http://xsltransform.net/がバックアップされるとすぐに、私は実際にそれを示すためのリンクを投稿できます。 –

関連する問題