2015-11-13 3 views
1

Я пытаюсь объединить 2-3 xml-файла в один файл для обработки моей системы. Я просмотрел несколько других сообщений и пришел к коду, который, как я думал, будет работать с использованием документа, но, похоже, он не делает желаемого эффекта. Я настоящий послушник, поэтому помощь в этом действительно ценится. Моя схема Код:Использование XSL для объединения файлов mutliple xml

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="/OrderRequest"> 
    <xsl:copy> 
     <xsl:apply-templates select="OrderRequest"/> 
     <xsl:apply-templates select="document('2.xml')/*/OrderRequest"/> 
     <xsl:apply-templates select="document('3.xml')/*/OrderRequest"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

Вот пример структуры моего файла XML. Много данных, но все данные мне нужно под OrderRequest

<cXML xml:lang="en-US" payloadID="2015-11-06Orders" timestamp="2015-11-06T13:30:11-05:00"> 
<Header> 
<From> 
    <Credential domain="NetworkId"> 
    <Identity>Order Admin</Identity> 
    </Credential> 
</From> 
<To> 
    <Credential domain="NetworkId"> 
    <Identity>fulfillment</Identity> 
    </Credential> 
</To> 
<Sender><Credential domain="NetworkId"><Identity>admin group</Identity><SharedSecret>hidden</SharedSecret> 
</Credential> 
<UserAgent>Procurement Sys</UserAgent> 
</Sender> 
</Header> 
<Request> 
<OrderRequest> 
<OrderRequestHeader orderID="PO12345" orderDate="2015-11-05T13:30:44-05:00" requisitionID=""> 
<Total><Money currency="USD">34.00</Money> 
</Total> 
<Shipping> 
<Money currency="USD">0.00</Money> 
<Description xml:lang="en-US">Next day</Description> 
</Shipping> 
<Contact> 
<Name xml:lang="en">Smith, Bob A.</Name> 
<Phone name="default"> 
<TelephoneNumber> 
<CountryCode isoCountryCode="US">1</CountryCode> 
<AreaOrCityCode>413</AreaOrCityCode> 
<Number>5551234</Number> 
<Extension></Extension> 
</TelephoneNumber> 
</Phone> 
</Contact> 
</OrderRequestHeader> 
<ItemOut quantity="2" lineNumber="1"> 
<ItemID> 
<SupplierPartID>TEX TI30XIIS</SupplierPartID> 
</ItemID> 
<ItemDetail> 
<UnitPrice> 
<Money currency="USD">17.00</Money></UnitPrice> 
<Description xml:lang="en">Scientific Calculator, Dual Power,2Line, 3-1/5"x6-1/10"x3/4"</Description> 
<UnitOfMeasure>EA</UnitOfMeasure> 
<Classification domain="UNSPSC">44120000</Classification> 
</ItemDetail> 
<ShipTo> 
<Address isoCountryCode="US" addressID="0001"> 
<Name xml:lang="en">Sample Location</Name> 
<PostalAddress name="default"> 
<DeliverTo>Smith, Bob</DeliverTo> 
<DeliverTo>AR Dept.</DeliverTo> 
<Street>Sample Business</Street> 
<Street>101 Main St.</Street> 
<City>Great Barrington</City> 
<State>MA</State> 
<PostalCode></PostalCode> 
<Country isoCountryCode="US">United States</Country> 
</PostalAddress> 
<Email name="default"></Email> 
<Phone name="default"> 
<TelephoneNumber> 
<CountryCode isoCountryCode="US">1</CountryCode> 
<AreaOrCityCode></AreaOrCityCode> 
<Number></Number> 
<Extension></Extension> 
</TelephoneNumber> 
</Phone> 
</Address> 
</ShipTo> 
<Distribution> 
<Accounting name="General"></Accounting> 
<Charge> 
<Money currency="USD">34.00</Money> 
</Charge> 
</Distribution> 
</ItemOut> 
</OrderRequest> 
</Request> 
</cXML> 

Благодаря

+0

@ DanielHaley Первое изменение удалило всю вложенную информацию ниже под , а второе предложение уничтожило все, кроме тега end cxml. – WJD

+0

Извините, форматирование входного образца отбросило меня. Пожалуйста, см. Мой ответ. Надеюсь, это поможет! –

+0

Помог ли мой ответ или у вас все еще проблемы? –

ответ

0

Если образец XML является правильным, первый шаблон (match="/OrderRequest") никогда не будет соответствовать, потому что OrderRequest не является корневым элементом.

Я думаю, вы должны соответствовать Request и обновить xsl:apply-templates ...

<xsl:template match="Request"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|OrderRequest"/> 
     <xsl:apply-templates select="document('2.xml')/*/*/OrderRequest"/> 
     <xsl:apply-templates select="document('3.xml')/*/*/OrderRequest"/> 
    </xsl:copy> 
    </xsl:template> 

Все остальное вроде нормально.

Смежные вопросы