2016-10-20 27 views
0

私は現在、私の周りを包み込むように見えないアクセス上の新しいコードに取り組んでいます。私はxsltの新機能で、 "For-Each"の基本的な概念を理解していますが、まだ問題があります。なぜ私のコードがどうなっているのか理解できない人がいたら嬉しいです。アクセスXSLTを使用してXMLをインポートする

私が期待していたのは、すべてのブランチ名を別々の行に入れてAccessのテーブルにすべてを印刷することでした。現在、ブランチ名は1行で表示されています。

何かが役に立ちます。君たちありがとう!

XSLTコード

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="/"> 
<ING_PNA_Import> 
    <xsl:for-each select="PNAResponse/PriceAndAvailability"> 
    <Import> 

     <Test> 
     <SKU> 
      <xsl:value-of select="@SKU"/> 
     </SKU> 
     <VendorNumber> 
      <xsl:value-of select="VendorNumber"/> 
     </VendorNumber> 
     <Price> 
      <xsl:value-of select="Price"/> 
     </Price> 
     <MPN> 
      <xsl:value-of select="ManufacturerPartNumber"/> 
     </MPN> 

      <ID> 
      <xsl:value-of select="Branch/@ID"/> 
      <xsl:text> 
      </xsl:text> 
     </ID> 

     <Name> 

      <xsl:for-each select="Branch"> 
      <xsl:value-of select="@Name"/> 
      </xsl:for-each>` 
     </Name> 

     <Availability> 
      <xsl:value-of select="Branch/Availability"/> 
     </Availability> 

     </Test> 

    </Import> 
    </xsl:for-each> 
</ING_PNA_Import> 

XMLコード:

<?xml version="1.0" encoding="iso-8859-1"?> 
<PNAResponse> 
<Version>2.0</Version> 
<TransactionHeader> 
    <SenderID>YOU</SenderID> 
    <ReceiverID>MD</ReceiverID> 
    <ErrorStatus ErrorNumber=""></ErrorStatus> 
    <DocumentID></DocumentID> 
    <TransactionID></TransactionID> 
</TransactionHeader> 

<PriceAndAvailability SKU="100150" Quantity="1"> 
    <Price>21.21</Price> 
    <SpecialPriceFlag></SpecialPriceFlag> 
    <ManufacturerPartNumber>TEST1234</ManufacturerPartNumber> 
    <ManufacturerPartNumberOccurs></ManufacturerPartNumberOccurs> 
    <VendorNumber>123X</VendorNumber> 
    <Description>Cool Item</Description> 
    <ReserveInventoryFlag>Y</ReserveInventoryFlag> 
    <AvailableRebQty>0</AvailableRebQty> 

    <Branch Name="Town1" ID="01"> 
    <Availability>8</Availability> 
    <OnOrder>0</OnOrder> 
    <ETADate></ETADate> 
    </Branch> 

    <Branch Name="Town2" ID="02"> 
    <Availability>8</Availability> 
    <OnOrder>0</OnOrder> 
    <ETADate></ETADate> 
    </Branch> 

    <Branch Name="Town3" ID="03"> 
    <Availability>6</Availability> 
    <OnOrder>5</OnOrder> 
    <ETADate></ETADate> 
    </Branch> 

    <Branch Name="Town4" ID="04"> 
    <Availability>5</Availability> 
    <OnOrder>5</OnOrder> 
    <ETADate></ETADate> 
    </Branch> 

    <Branch Name="Town5" ID="05"> 
    <Availability>10</Availability> 
    <OnOrder>0</OnOrder> 
    <ETADate></ETADate> 
    </Branch> 

    <UPC>123456789</UPC> 
    <CustomerPartNumber></CustomerPartNumber> 

答えて

0

単に巣支店<xsl:for-each>内のあなたの<Name>ノードが達成するために、複数のCHIL Dノード:

<Name> 
    <xsl:for-each select="Branch"> 
     <xsl:value-of select="@Name"/> 
    </xsl:for-each>` 
    </Name> 

はMS Accesの中で、

<?xml version='1.0' encoding='UTF-8'?> 
<ING_PNA_Import> 
    <Import> 
    <Test> 
     <SKU>100150</SKU> 
     <VendorNumber>123X</VendorNumber> 
     <Price>21.21</Price> 
     <MPN>TEST1234</MPN> 
     <ID>01</ID> 
     <Name>Town1</Name> 
     <Name>Town2</Name> 
     <Name>Town3</Name> 
     <Name>Town4</Name> 
     <Name>Town5</Name> 
     <Availability>8</Availability> 
    </Test> 
    </Import> 
</ING_PNA_Import> 

しかし

<xsl:for-each select="Branch"> 
    <Name> 
     <xsl:value-of select="@Name"/> 
    </Name> 
    </xsl:for-each> 

出力を更新しましたS、ほとんどのデータベースのように、あなたは明確な列名を必要とし、その数、すなわちノードの位置と接尾辞を付ける考えてみます。

<?xml version='1.0' encoding='UTF-8'?> 
<ING_PNA_Import> 
    <Import> 
    <Test> 
     <SKU>100150</SKU> 
     <VendorNumber>123X</VendorNumber> 
     <Price>21.21</Price> 
     <MPN>TEST1234</MPN> 
     <ID>01</ID> 
     <Name1>Town1</Name1> 
     <Name2>Town2</Name2> 
     <Name3>Town3</Name3> 
     <Name4>Town4</Name4> 
     <Name5>Town5</Name5> 
     <Availability>8</Availability> 
    </Test> 
    </Import> 
</ING_PNA_Import> 

<xsl:for-each select="Branch"> 
    <xsl:element name="{concat('Name', position())}"> 
     <xsl:value-of select="@Name"/> 
    </xsl:element> 
</xsl:for-each> 

出力は最後に、このすべてが<xsl:for-each>なしで行うことができますこれはしばしばXSLTの新入社員によって頻繁に使用されるため、XSLTの再帰的なテンプレートマッピングをまだ認識していない汎用言語からの反復プログラミングに使用されます。また、お客様のの稼働状況はで、現在のところ最初にブランチノードからのみとなります。以下は再作成されますが、最後のテンプレートに支店を対応するすべての値をマッピングすることを考える:

代替

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

    <xsl:template match="/PNAResponse"> 
    <ING_PNA_Import>    
     <xsl:apply-templates select="PriceAndAvailability"/> 
    </ING_PNA_Import> 
    </xsl:template> 

    <xsl:template match="PriceAndAvailability">   
    <Import> 
     <Test> 
     <SKU><xsl:value-of select="@SKU"/></SKU> 
     <VendorNumber><xsl:value-of select="VendorNumber"/></VendorNumber> 
     <Price><xsl:value-of select="Price"/></Price> 
     <MPN><xsl:value-of select="ManufacturerPartNumber"/></MPN> 
     <ID><xsl:value-of select="Branch/@ID"/></ID>    
     <xsl:apply-templates select="Branch"/> 
     <xsl:copy-of select="Branch[1]/Availability"/> 
     </Test> 
    </Import> 
    </xsl:template> 

    <xsl:template match="Branch"> 
    <xsl:element name="{concat('Name', position())}"> 
     <xsl:value-of select="@Name"/> 
    </xsl:element>     
    </xsl:template> 

</xsl:stylesheet> 
+0

そんなにパフェありがとうございます!私の最大の問題は、さまざまなタイプの通話を使用することと、それを使用することでした。 – Pang

関連する問題