Преобразование XSL - исключить некоторых детей - PullRequest
0 голосов
/ 15 февраля 2011

Извиняюсь, если это не очень хорошо написано, но это мое первое знакомство с XSLT.

Ниже приведен пример структуры XML.

<ProcessedOrder>
   <ProcessDetail>
     <Detail1>Some Sample Data</Detail1>
   </ProcessDetail>
   <Management>
     <Employee Id="EM156896">   
       <Name>James Davies</Name>
     </Employee>
   </Management>
   <Order Id="IR1245486">
     <Details>
       <Date>01-02-2011</Date>
       <Name>XSLT : The Complete Beginners Guide</Name>
       <Description>The Complete Beginners Guide to XSL Transformations</Description>
     </Details>
     <Delivery>
       <Customer Id="CN005687">
         <Name>John Henry</Name>
    <ContactInformation>
      <AddressLine1>55 John Street</AddressLine1>
      <Country _Id="GBR">United Kingdom</Country>
      <Phone>1234-123456</Phone>
      <Fax>1234-5544-2250</Fax>
      <EmailAddress>john.henry@sampledata.com</EmailAddress>
      <City>London</City>
      <PostalCode>AW7T 3XS</PostalCode>
         </ContactInformation>
       </Customer>
     </Delivery>
   </Order>
   <Billing>
     <Customer Id="CN005858">
       <Name>Thomas Henry</Name>
       <ContactInformation>
         <AddressLine1>66 Thomas Street</AddressLine1>
         <Country _Id="GBR">United Kingdom</Country>
         <Phone>1234-545464</Phone>
         <Fax>2233-8989-1234</Fax>
         <EmailAddress>thomas.henry@sampledata.com</EmailAddress>
         <City>Bristol</City>
         <PostalCode>BS4Y 2WT</PostalCode>
       </ContactInformation>
     </Customer>
   </Billing>
</ProcessedOrder>

// Желаемый вывод

<Order Id="IR1245486">
  <Details>
    <Date>01-02-2011</Date>
    <Name>XSLT : The Complete Beginners Guide</Name>
    <Description>The Complete Beginners Guide to XSL Transformations</Description>      
  </Details>
  <Delivery>
    <Customer Id="CN005858">
      <Name>Thomas Henry</Name>
      <ContactInformation>
        <AddressLine1>66 Thomas Street</AddressLine1>
        <Country _Id="GBR">United Kingdom</Country>
        <Phone>1234-545464</Phone>
        <Fax>2233-8989-1234</Fax>
        <EmailAddress>thomas.henry@sampledata.com</EmailAddress>
        <City>Bristol</City>
        <PostalCode>BS4Y 2WT</PostalCode>
      </ContactInformation>
    </Customer>
  </Delivery>
</Order>

Я пытаюсь сделать несколько вещей во время трансформации.

  1. Извлечение <Order> из XML
  2. Исключить <Customer> из <Delivery>
  3. Вставьте <Customer> из <Billing>, где был <Delivery><Customer>.

Я предполагаю, что могу извлечь Орден, используя следующее ..

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <xsl:apply-templates select="//Order"/>
  </xsl:template>

  <xsl:template match="Order">
    <xsl:copy-of select="."/>    
  </xsl:template> 
</xsl:stylesheet>

Как только я начинаю пытаться исключить Клиента, я полностью теряюсь ..

Любая помощь будет принята с благодарностью.

Большое спасибо,

М.

1 Ответ

0 голосов
/ 15 февраля 2011

Вот пример таблицы стилей, которая должна выполнить работу и позволить дальнейшую настройку путем добавления шаблонов:

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

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

  <xsl:template match="/">
    <xsl:apply-templates select="ProcessedOrder/Order"/>
  </xsl:template>

  <xsl:template match="Order/Delivery/Customer">
    <xsl:apply-templates select="/ProcessedOrder/Billing/Customer"/>
  </xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...