2017-02-19 16 views
0

構造化されていないXML文書を処理して、構造化文書に変換できるようにしています。私は構造化されたフォーマットを作成し、簡単に使用することにより、関連するフィールドを抽出してXMLを生成することができたXML文書のノード選択

<?xml version="1.0" encoding="UTF-8"?> 
<xmlns:evt="http://www.metadata..com/Management/"> 
    <Identifier>3442=000-MNNN</Identifier> 
    <TypeCode>Purchase History</TypeCode> 
    <TypeDescription>Order Summary</TypeDescription> 
    <PurposeCode>Invoice</PurposeCode> 
    <Member> 
     <Email>String</Email> 
     <MemberSince>03/23/2000</MemberSince> 
     <MemberType> 
      <MemberShipTypeCode>String</MemberShipTypeCode> 
      <TypeDescription>String</TypeDescription> 
     </MemberType> 
     <Address> 
      <AddressLine1Text>String</AddressLine1Text> 
      <AddressLine2Text>String</AddressLine2Text> 
      <CityName>String</CityName> 
      <StateCode>String</StateCode> 
      <Zip5Code>String</Zip5Code> 
      <Zip4Code>String</Zip4Code> 
     </Address> 
     <Telephone> 
      <AreaCode>String</AreaCode> 
      <TelephoneNumber>String</TelephoneNumber> 
     </Telephone> 
    </Member> 
    <Company> 
     <CompanyName>String</CompanyName> 
     <CustomerIdentification>0.0</CustomerIdentification> 
     <PrimaryCustomerIndicator>String</PrimaryCustomerIndicator> 
     <CompanyAddress> 
      <CompanyAddressLine1Text>String</CompanyAddressLine1Text> 
      <CompanyAddressLine2Text>String</CompanyAddressLine2Text> 
      <CompanyCityName>String</CompanyCityName> 
      <CompanyStateCode>String</CompanyStateCode> 
      <CompanyZip5Code>String</CompanyZip5Code> 
      <CompanyZip4Code>String</CompanyZip4Code> 
     </CompanyAddress> 
    </Company> 
    <Orders> 
    <CreditCard> 
      <CardName>String</CardName> 
      <CardExpirationDate>1967-08-13</CardExpirationDate> 
    </CreditCard> 
    <Order> 
     <Discount>String</Discount> 
     <ShippingVendorName>String</ShippingVendorName> 
     <ShipmentTrackingNumber>String</ShipmentTrackingNumber> 
     <ShipmentTrackingLinkText>String</ShipmentTrackingLinkText> 
     <CustomerName>String</CustomerName> 
     <CustomerEmailAddressText>String</CustomerEmailAddressText> 
     <Telephone> 
      <AreaCode>String</AreaCode> 
      <TelephoneNumber>String</TelephoneNumber> 
     </Telephone> 
     <ShippingAddress> 
      <ShippingAddressLine1Text>String</ShippingAddressLine1Text> 
      <ShippingAddressLine2Text>String</ShippingAddressLine2Text> 
      <ShippingCareOfText>String</ShippingCareOfText> 
      <ShippingCityName>String</ShippingCityName> 
      <ShippingStateCode>String</ShippingStateCode> 
      <ShippingZip5Code>String</ShippingZip5Code> 
      <ShippingZip4Code>String</ShippingZip4Code> 
     </ShippingAddress> 
     <LineItem> 
      <LineItemNumber>String</LineItemNumber> 
      <LineItemQuantityCount>0</LineItemQuantityCount> 
      <ItemOrderedIndicator>String</ItemOrderedIndicator> 
      <Discount>String</Discount> 
     </LineItem> 
    </Order> 
    </Orders> 

:非構造化文書は、次の

<?xml version="1.0" encoding="UTF-8"?> 
<CustomerInformation> 
    <CustomerPurchaseID>String</CustomerPurchaseID> 
    <MemberAddress>String</MemberAddress> 
    <MemberID>String</MemberID> 
    <MemberCity>String</MemberCity> 
    <MemberName>String</MemberName> 
    <MemberType>String</MemberType> 
    <MemberState>String</MemberState> 
    <MemberSince>String</MemberSince> 
    <PurchaseDate>String</PurchaseDate> 
    <CreditCardName></CreditCardName> 
    <CreditCardExpirration></CreditCardExpirration> 
    <Orders> 
     <LineItemCode>String</LineItemCode> 
     <LineItemID>String</LineItemID> 
     <LineItemDescription>String</LineItemDescription> 
     <DiscountCode>String</DiscountCode> 
    </Orders> 
    <Orders> 
     <LineItemCode>String</LineItemCode> 
     <LineItemID>String</LineItemID> 
     <LineItemDescription>String</LineItemDescription> 
     <DiscountCode>String</DiscountCode> 
    </Orders> 
    <ShipToAddress>String</ShipToAddress> 
    <ShipToCity>String</ShipToCity> 
    <ShipToFirstName>String</ShipToFirstName> 
    <ShipToLastName>String</ShipToLastName> 
    <ShipToState>String</ShipToState> 
    <ShipToZIPCode>String</ShipToZIPCode> 
    <CustomerAddressLine1>String</CustomerAddressLine1> 
    <CustomerAddressLine2>String</CustomerAddressLine2> 
    <CustomerID>String</CustomerID> 
    <CustomerCity>String</CustomerCity> 
    <CustomerEmail>String</CustomerEmail> 
    <CustomerFirstName>String</CustomerFirstName> 
    <CustomerLastName>String</CustomerLastName> 
    <CustomerHomePhone>String</CustomerHomePhone> 
    <CustomerState>String</CustomerState> 
    <CustomerZIP>String</CustomerZIP> 
    <Status>String</Status> 
    <OrderedFromName>String</OrderedFromName> 
    <CustomerIdentification></CustomerIdentification> 
    <PrimaryCustomerIndicator>String</PrimaryCustomerIndicator> 
    <OrderedFromAddressLine1Text>String</OrderedFromAddressLine1Text> 
    <OrderedFromAddressLine2Text>String</OrderedFromAddressLine2Text> 
    <OrderedFromCityName>String</OrderedFromCityName> 
    <OrderedFromStateCode>String</OrderedFromStateCode> 
    <OrderedFromZip5Code>String</OrderedFromZip5Code> 
    <OrderedFromZip4Code>String</OrderedFromZip4Code> 
    </CustomerInformation> 

のように見えるそれは、この何かに変換します以下のXSLTのノード値:

<xsl:value-of select=.../> 

しかし、私はそれを行うより良い方法があるかもしれないと感じました。構造化されていないドキュメントやフラットなドキュメントをナビゲートする際に、構造の生成方法を制御できるようにしたいと考えています。すべてのMemberAddressフィールドの要素をグループ化する方法はありますか?私がこれを行うことができれば、出力のメンバー部分を作成することができます。私は他の要素についても同じことをすることができました。構造化文書のハードコーディングに関する私の懸念は、今後変更される可能性があることです。可能であれば、出力を制御できるようにしたいと思います。ソース文書のすべてのメンバー情報は、ターゲット文書のメンバー要素にマップする必要があります。 OrderedFromで始まるソース文書の要素は、ターゲット文書のCompanyフィールドにマップする必要があります。 ShipTo要素は、ターゲット文書のordersセクションにある出荷情報にマッピングされなければなりません。助けてください!!

+0

''は有効な開始タグではありません。また、 'は有効なXSLT命令ではありません。 –

答えて

1

私は構造化文書のハードコーディングについて懸念しており、今後は が変更される可能性があります。

XSLTスタイルシートは、XMLスキーマのデータを別のXMLスキーマに変換します。どちらのスキーマの変更でもスタイルシートの書き直しが必要ないと予想するのは現実的ではありません。

のすべてのMemberAddressフィールドの要素をグループ化する方法はありますか?

はい、あなたはそれらを特定する方法がある場合はあります。たとえば、あなたが行うことができます:

<Member> 
    <xsl:for-each select="*[starts-with(name(), 'Member')]"> 
     <xsl:element name="{substring-after(name(), 'Member')}"> 
      <xsl:value-of select="." /> 
     </xsl:element> 
    </xsl:for-each> 
</Member> 

を取得するには:

<Member> 
    <Address>String</Address> 
    <ID>String</ID> 
    <City>String</City> 
    <Name>String</Name> 
    <Type>String</Type> 
    <State>String</State> 
    <Since>String</Since> 
</Member> 

が、それはあなたの期待される出力に適合していません。ところで、あなたの出力には、あなたの入力にない多くのデータが表示されます。メンバーの電子メール。

+0

はい、ドキュメントは非常に冗長なので、多くのおかげでトリミングされました – BreenDeen

関連する問題