0
我想知道我們如何將前綴類型[xsi:type「...」]添加到每個重複的父節點並選擇它的所有子節點。 xml是soap封裝的,輸出是對信封的標題和正文的修改。 樣品輸入XML是:如何將前綴類型添加到重複父節點中,並使用XSLT爲每個元素選擇所有元素?
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://Example1.com"
xmlns:ns1="http://Sample1.com">
<soapenv:Header>
<ns:SessionHeader>
<ns:Auth>a1b2c4d5</ns:Auth>
</ns:SessionHeader>
</soapenv:Header>
<soapenv:Body>
<ns:Create>
<!--Zero or more repetitions:-->
<ns:BankAccount>
<ns1:AccountNumber>1111</ns1:AccountNumber>
<ns1:BillingState>Texas</ns1:BillingState>
<ns1:Name>John</ns1:Name>
<ns1:Phone>+1 111</ns1:Phone>
<ns1:Site>Chicago</ns1:Site>
<ns1:Website>www.site1.com</ns1:Website>
.
.
</ns:BankAccount>
<ns:BankAccount>
<ns1:AccountNumber>222</ns1:AccountNumber>
<ns1:BillingState>Hawai</ns1:BillingState>
<ns1:Name>Bob</ns1:Name>
<ns1:Phone>+2 222</ns1:Phone>
<ns1:Site>Canada</ns1:Site>
<ns1:Website>www.site2.com</ns1:Website>
.
.
</ns:BankAccount>
.
.
.
</ns:Create>
</soapenv:Body>
</soapenv:Envelope>
對於給定的輸入XML中的所需的輸出XML是
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://Example1.com"
xmlns:ns1="http://Sample1.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<ns:SessionHeader>
<ns:Auth>a1b2c4d5</ns:Auth>
</ns:SessionHeader>
</soapenv:Header>
<soapenv:Body>
<ns:Create>
<ns:BankAccount xsi:type="Account" xmlns="http://Example1.com" >
<ns1:AccountNumber>1111</ns1:AccountNumber>
<ns1:BillingState>Texas</ns1:BillingState>
<ns1:Name>John</ns1:Name>
<ns1:Phone>+1 111</ns1:Phone>
<ns1:Site>Chicago</ns1:Site>
<ns1:Website>www.site1.com</ns1:Website>
.
.
</ns:BankAccount>
<ns:BankAccount xsi:type="Account" xmlns="http://Example1.com" >
<ns1:AccountNumber>222</ns1:AccountNumber>
<ns1:BillingState>Hawai</ns1:BillingState>
<ns1:Name>Bob</ns1:Name>
<ns1:Phone>+2 222</ns1:Phone>
<ns1:Site>Canada</ns1:Site>
<ns1:Website>www.site2.com</ns1:Website>
.
.
</ns:BankAccount>
.
.
.
</ns:Create>
</soapenv:Body>
</soapenv:Envelope>
我與下面提到XSL嘗試,但它不產生所需要的結果。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://Example1.com"
xmlns:ns1="http://Sample1.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<ns:SessionHeader>
<ns:Auth>
<xsl:value-of select="//ns:Auth"/>
</ns:Auth>
</ns:SessionHeader>
</soapenv:Header>
<soapenv:Body>
<ns:Create>
<ns:BankAccount xsi:type="Account" xmlns="http://Example1.com">
<xsl:apply-template select="node()"/>
</ns:BankAccount>
</ns:Create>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
</xsl:stylesheet>
我不知道我在哪裏出錯。 我是否需要首先獲取其前綴添加元素的所有父級「BankAccount」節點,然後再生成肥皂信封? 請指導我。
感謝您的答覆和建議。我已經試過這個,但我得到的答案是這樣的:'這不是事物我期待...我需要這樣的'' –
CatchLight
2013-05-02 12:19:53