0

次の XML スニペットがあります。

<?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>

変換されたドキュメントでは、SourceEndpointは入力Backorderされていますが、別の名前空間を使用しているため、 は入力されていません。では、別の名前空間を使用するにはどうすればよいでしょうか?

4

1 に答える 1

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>
于 2012-10-11T14:25:58.297 に答える