2011-01-29 3 views
2

XML取得:何らかの理由でXSLTいくつかの不要な値

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <!DOCTYPE UploadXML SYSTEM "ex_v222.dtd"> 
    <UploadXML><Version>1.1</Version> 
<Properties> 
<Property> 
<IntegratorID>3232321</IntegratorID> 
<IntegratorPropertyID>12312312-3</IntegratorPropertyID> 
<IntegratorOfficeID>1231231231</IntegratorOfficeID>.... 

を、以下のXSLファイルは、常に1.1値を取得し、封筒の要素の前に置く:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:param name="Z">2312</xsl:param> 
    <xsl:param name="A">KKK</xsl:param> 
    <xsl:output method="xml" encoding="utf-8" indent="yes" /> 
     <xsl:strip-space elements="*" /> 

     <xsl:template match='/UploadXML/Properties'> 
     <Envelope> 
     <Body> 
     <add_adverts> 
     <xsl:apply-templates select='Property'/> 
     </add_adverts> 
     </Body> 
     </Envelope> 
     </xsl:template> 

.... (私は、テンプレートの実装が重要ではないと考えている。)

私は何を得ることである:

<?xml version="1.0" encoding="utf-8"?> 
1.1<Envelope xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <Body> 
    <add_adverts> 
     <advert> 

。 。 。

が1.1ということか?どうして?

答えて

6

あなたが見ているということは、任意のテンプレートに一致しないノードのためのXSLTのデフォルトの動作であるため。

<xsl:template match="Version"/> 
+0

グレート!問題を解決しました。回答は3分後に受け付けられます(スタックオーバーフローを伴うもの.. – snoofkin

2

あなたはXSLT処理モデルについて読むとXSLT built-in (default) templatesが使用されている方法を理解する必要があります。具体的にあなただけの空のテンプレートを使用することができますバージョンの要素の内容をコピーしないために。

観測された行動が原因単にコピーし、それを組み込みのテンプレートテキストノードのためのXSLTにある:

<xsl:template match="text()|@*"> 
    <xsl:value-of select="."/> 
</xsl:template> 

ソリューションが中に表示されません任意のテキストノードのために、このテンプレートをオーバーライドすることです空の本文を持つテンプレートを持つ出力(何もしないので、テキストノードをコピーしません)。この場合:

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

+1)。 – Flack

関連する問題