2016-08-10 18 views
0

商品と商品を含むXMLファイルがあります。商品に商品が含まれている場合もあります。私は商品がない商品のみを手に入れたいです。xmlファイルから該当する商品の下に商品がない商品のみを取得します。

これは、私は、XMLファイル内でこのように私の出力をしたい、私の入力

<?xml version="1.0" encoding="UTF-8"?> 
<products> 
    <product> 
     <prod-id>P16753</prod-id> 
     <product-status>CREATED</product-status> 
     <validation-status>Valid</validation-status> 
     <duplication-status>Unique</duplication-status> 
     <content-status>New</content-status> 
     <items/> 

     <created-on>2016-08-12T11:30:00</created-on> 
     <created-by>Administrator</created-by> 
     <last-changed-on>2016-08-04T17:34:00</last-changed-on> 
     <last-changed-by>ap0712</last-changed-by> 
     <delete>false</delete> 
    </product> 
    <product> 

     <prod-id>P16754</prod-id> 
     <product-status>CREATED</product-status> 
     <validation-status>Valid</validation-status> 
     <duplication-status>Unique</duplication-status> 
     <content-status>New</content-status> 
     <items> 
      <item> 
       <item-id>i16754</item-id> 
       <item-status>CREATED</item-status> 
       <validation-status>Valid</validation-status> 
       <duplication-status>Unique</duplication-status> 
       <content-status>New</content-status> 
      </item> 
     </items> 

     <created-on>2016-08-12T11:30:00</created-on> 
     <created-by>Administrator</created-by> 
     <last-changed-on>2016-08-04T17:34:00</last-changed-on> 
     <last-changed-by>ap0712</last-changed-by> 
     <delete>false</delete> 
    </product> 
</products> 

です。可能であれば、私は(私はこのフォーラムから得た)XSLTコードを持っていますが、私はこの作品

をすることはできませんよ、後で

prod-id P16754 

csvファイルに変換することができるように、私はタグを削除したいです

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 


<ns:WhiteList> 
    <name>prod-id</name> 
</ns:WhiteList> 

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

<xsl:template match= 
    "*[not(descendant-or-self::*[name()=prod-id[not(items/item)]document('')/*/ns:WhiteList/*])]"/> 

</xsl:transform> 
+0

XMLではなくプレーンテキストが必要な場合は、IDテンプレートを使用することは意味がありません。 「アイテムがない商品のみを取得したい」と言うと、それは 'items/item'子孫なしで完全な' product'エレメントを選択したいということですか?あなたが望む出力スニペットには 'prod-id P16754'という要素が1つしか含まれておらず、完全な' product'ではなく、どのデータを出力したいのかを詳しく説明してください。 –

答えて

0

あなたは

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="text"/> 

    <xsl:template match="/"> 
     <xsl:value-of select="products/product[not(items/item)]/prod-id/concat(local-name(), ' ', .)" separator="&#10;"/> 
    </xsl:template> 

</xsl:transform> 

を使用している場合は、あなたの入力サンプルのための出力が

prod-id P16753 
です

オンラインサンプルはhttp://xsltransform.net/pPJ8LUPです。

+0

...ありがとうございますが、それは私のために働いていません。 xsl flieをxmlで実行しているときに、エラーが発生しています。xmlドキュメントに最上位の要素Errorが必要です。なぜこれが起こっているべきかアドバイスできますか? Googleで検索したところ、間違ったxmlファイルが原因である可能性がありますが、同じxmlファイルが他のxsltファイルにも使用されています。 – adit

+0

私は自分の入力ファイルを編集しました。私は両方の製品番号が同じだった。私は最初のものを変更しました。そのことに対する謝罪今、私は出力にprod-id P16753が必要です。あなたはすでにそれを理解し正しい方法でやっているかもしれませんが、私は確信しています。 – adit

+0

@adit、編集を参照してください、私は答えが問題を解決すると思います。 –

関連する問題