2016-08-17 8 views
1

私はXSLTが新しく、SSRSで生成されたXMLファイルから要素を取り除くために、さまざまなWebページやフォーラムを使用しています。xmlからXSLT経由で要素を削除する

出力は次のようになります。

<?xml version="1.0" encoding="utf-8"?> 
<Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="xlst_x0020_test" xsi:schemaLocation="xlst_x0020_test http://reportserver?%2Fxlst%20test&amp;rs%3AFormat=XML&amp;rc%3ASchema=True" Name="xlst test"> 
    <resultset> 
    <detail_collection> 
     <Detail> 
     <title>movie 1</title> 
     <year>2000</year> 
     <genre>comedy</genre> 
     </Detail> 
     <Detail> 
     <title>movie 2</title> 
     <year>2010</year> 
     <genre>animation</genre> 
     </Detail> 
     <Detail> 
     <title>movie 3</title> 
     <year>1990</year> 
     <genre>action</genre> 
     </Detail> 
    </detail_collection> 
    </resultset> 
</Report> 

出力は次のようになりますので、私は要素「結果セット」と「detail_collection」を削除したいと思います:私が作成した

<?xml version="1.0" encoding="utf-8"?> 
<Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="xlst_x0020_test" xsi:schemaLocation="xlst_x0020_test http://reportserver?%2Fxlst%20test&amp;rs%3AFormat=XML&amp;rc%3ASchema=True" Name="xlst test"> 
    <Detail> 
     <title>movie 1</title> 
     <year>2000</year> 
     <genre>comedy</genre> 
    </Detail> 
    <Detail> 
     <title>movie 2</title> 
     <year>2010</year> 
     <genre>animation</genre> 
    </Detail> 
    <Detail> 
     <title>movie 3</title> 
     <year>1990</year> 
     <genre>action</genre> 
    </Detail> 
</Report> 

次ここでのXSLT以下のアドバイス:次のような出力になり

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

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="resultset | detail_collection"> 
    <xsl:apply-templates/> 
</xsl:template> 

</xsl:stylesheet> 

私は簡単な間違いがあると思っていますが、それを見ることはできません。だれでも助けてくれますか?

また、xsltの基本から始まる良いウェブサイト、書籍、ビデオなどは誰にもありますか?

+0

PowerShellは、XMLファイルを介して移動し、また、必要なものを引き出すことができます。 XSLTを使用してこれを達成する必要がない限り、一見価値があるかもしれません。 –

答えて

2

あなたの間違いは、名前空間を占めていないことです。あなたのReport要素はデフォルトの名前空間宣言

<Report ... xmlns="xlst_x0020_test"> 

これはReport要素を意味し、そのすべての子孫を持って、名前空間にあります。しかし、あなたはXSLTでこの名前空間を占めていません。名前空間にresultsetdetail_collectionを一致させようとしていますが、名前自体が同じであっても、名前空間の要素と同じではありません。

はXSLTで使用される名前空間接頭辞は関係ありません。このXSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:test="xlst_x0020_test"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="test:resultset | test:detail_collection"> 
    <xsl:apply-templates/> 
</xsl:template> 
</xsl:stylesheet> 

を試してみてください。それはXMLと一致しなければならないURIです。ここでは、名前空間上に読む

http://www.xml.com/pub/a/1999/01/namespaces.htmlhttp://www.xml.com/pub/a/2001/04/04/trxml/

関連する問題