2

必要なデータを含む XML ファイルを別の XML ファイルに変換するだけです。子ノードに正しいカテゴリが含まれていない場合、変換によってすべての親ノードが削除されます。

入力 XML:

    <SHOP>
    <SHOPITEM>
        <ITEM_ID>142</ITEM_ID>
        <PRODUCT>Mora MV 1251</PRODUCT>
        <DESCRIPTION>XXXXX</DESCRIPTION>
        <URL>http://www.xxx.sk/o</URL>
        <IMGURL>http://xxx.jpg</IMGURL>
        <PRICE>6.74</PRICE>
        <PRICE_VAT>8.10</PRICE_VAT>
        <VAT>0.20</VAT>
        <MANUFACTURER>Mora</MANUFACTURER>
        <CATEGORYTEXT>Accessories / Mobile</CATEGORYTEXT>
        <EAN>8590371028526</EAN>
        <PRODUCTNO></PRODUCTNO>
        <WARRANTY>24</WARRANTY>
        <DELIVERY_DATE>24</DELIVERY_DATE>
    </SHOPITEM>

    <SHOPITEM>
       <ITEM_ID>XXX</ITEM_ID>
       <PRODUCT>Hyundai LLF 22924 DVDR</PRODUCT>
       <DESCRIPTION>XXXXX</DESCRIPTION>
       <URL>http://www.xxx.sk/t</URL>
       <IMGURL>http://xxx.jpg</IMGURL>
       <PRICE>173.35</PRICE>
       <PRICE_VAT>208.00</PRICE_VAT>
       <VAT>0.20</VAT>
       <MANUFACTURER>Hyundai</MANUFACTURER>
       <CATEGORYTEXT>Main category / TVs</CATEGORYTEXT>
       <EAN>xxxxx</EAN>
       <PRODUCTNO/>
       <WARRANTY>24</WARRANTY>
       <DELIVERY_DATE>99999</DELIVERY_DATE>
    </SHOPITEM>
    </SHOP>

CATEGORYTEXT がメイン カテゴリ/テレビではないすべての SHOPITEM ノードを削除する必要があります

以下の XSLT があります。

<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="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
  </xsl:template>

 <xsl:template match="CATEGORYTEXT[not(text() = 'Main category / TVs')]"/>
</xsl:stylesheet>

ただし、これは完全なSHOPITEMノードではなく、CATEGORYTEXTノードのみを削除します。誰でも私を助けてもらえますか?:)私もXSLTが初めてです。すべての助けに感謝します。

望ましい出力は次のとおりです。

       <SHOP>
         <SHOPITEM>
           <ITEM_ID>XXX</ITEM_ID>
           <PRODUCT>Hyundai LLF 22924 DVDR</PRODUCT>
           <DESCRIPTION>XXXXX</DESCRIPTION>
           <URL>http://www.xxx.sk/t</URL>
           <IMGURL>http://xxx.jpg</IMGURL>
           <PRICE>173.35</PRICE>
           <PRICE_VAT>208.00</PRICE_VAT>
           <VAT>0.20</VAT>
           <MANUFACTURER>Hyundai</MANUFACTURER>
           <CATEGORYTEXT>Main category / TVs</CATEGORYTEXT>
           <EAN>xxxxx</EAN>
           <PRODUCTNO/>
           <WARRANTY>24</WARRANTY>
           <DELIVERY_DATE>99999</DELIVERY_DATE>
         </SHOPITEM>
       </SHOP>
4

1 に答える 1

3

これを交換

<xsl:template match="CATEGORYTEXT[not(text() = 'Main category / TVs')]"/>

これとともに:

<xsl:template match="SHOPITEM[not(CATEGORYTEXT = 'Main category / TVs')]"/>

現在のテンプレートCATEGORYTEXTは、テキスト ノードの子の値に基づいて要素をフィルター処理しますが、必要なのは、要素の子SHOPITEMの値に基づいて要素をフィルター処理することですCATEGORYTEXT

text()XPath 式で実際に使用する必要があるのは非常にまれであることに注意してください- 通常、あなたtext()が気にかけているのは完全要素自体の文字列値 (定義上、すべての子孫テキスト ノードの連結)

于 2013-09-02T14:08:37.607 に答える