2012-10-11 47 views
0

我有下列XML片段:對XSL文檔使用多個名稱空間?

<?xml version="1.0" encoding="UTF-8"?> 
<Envelope xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"> 
    <Header> 
    <MessageId>{11EA62F5-543A-4483-B216-91E526AE2319}</MessageId>  
    <SourceEndpoint>SomeSource</SourceEndpoint> 
    <DestinationEndpoint>SomeDestination</DestinationEndpoint> 
    </Header> 
    <Body> 
    <MessageParts xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"> 
     <SalesInvoice xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice"> 
     <DocPurpose>Original</DocPurpose> 
     <SenderId>Me</SenderId> 
     <CustInvoiceJour class="entity"> 
      <_DocumentHash>ddd70464452c64d5a35dba5ec50cc03a</_DocumentHash>    
      <Backorder>No</Backorder> 
     </CustInvoiceJour> 
     </SalesInvoice> 
    </MessageInvoice> 
    </Body> 
</Envelope> 

正如你所看到的,這個使用多個命名空間,所以當我想要改造這個使用XSL,我不知道我應該使用哪個命名空間,因爲我需要從Header標籤和SalesInvoice標籤收集一些信息。

這裏是我的XSL文件:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xheader="http://schemas.microsoft.com/dynamics/2008/01/documents/Message" 
    exclude-result-prefixes="xheader" 
> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:template match="/"> 
    <header> 
     <name><xsl:value-of select="/*/*/xheader:SourceEndpoint" /></name> 
    </header> 
    <body> 
     <test><xsl:value-of select="/*/*/*/*/*/xheader:Backorder" /></test> 
    </body> 
    </xsl:template> 
</xsl:stylesheet> 

在轉換後的文檔,填充了SourceEndpointBackorder不是,因爲它使用了不同的命名空間。那麼我怎樣才能讓它使用不同的命名空間呢?

回答

1

你應該只需要申報,並在XSLT使用兩個命名空間:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xheader="http://schemas.microsoft.com/dynamics/2008/01/documents/Message" 
    xmlns:xsales="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesInvoice" 
    exclude-result-prefixes="xheader xsales" 
> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:template match="/"> 
    <header> 
     <name><xsl:value-of select="/*/*/xheader:SourceEndpoint" /></name> 
    </header> 
    <body> 
     <test><xsl:value-of select="/*/*/*/*/*/xsales:Backorder" /></test> 
    </body> 
    </xsl:template> 
</xsl:stylesheet> 
+0

謝謝,但如果我想從'排除對結果prefixes' – CallumVass

+1

同時排除'xheader'和'xsales'只需包含兩個 - exclude-result-prefixes =「xheader xsales」。我會更新答案來做到這一點。 –

+0

謝謝,由於某種原因,我嘗試了,但用逗號:'exclude-result-prefixes =「xheader,xsales」'! – CallumVass