MKM_Matt Ответов: 1

Получение атрибута из XML


Без сомнения, для Вас, экспертов, это будет быстро, но для меня это был бесплодный день.
У меня есть XML, который меня попросили допросить немного дальше (сокращенная версия ниже...)
То, что я хочу сделать, - это вывести различные части и представить их в html. Все, что мне нужно добавить, это env:destination/@branch-да.

Но я никак не могу до него добраться.


<?xml version="1.0" encoding="utf-8"?>
<kmsg xmlns:env="http://xml.kerridgecs.net/K809/k8msgEnvelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xml.kerridgecs.net/k8msg" xsi:schemaLocation="http://xml.kerridgecs.net/k8msg K8Invoice.xsd">
  <header>
    <env:envelope>
      <env:source branch="DEFAULT" endpoint="suppNum" machine="0" password="Toast" />
      <env:destination branch="0009" endpoint="01" machine="0" />
      <env:payload>INVOICE</env:payload>
      <env:cfcompany>01</env:cfcompany>
      <env:service>NOTSET</env:service>
    </env:envelope>
  </header>
  <body>
    <Invoice xmlns="urn:schemas-basda-org:2000:salesInvoice:xdr:3.01">
      <InvoiceReferences>
        <BuyersOrderNumber>1003164</BuyersOrderNumber>
      </InvoiceReferences>
    </Invoice>
  </body>
</kmsg>


Я взял копию текущей таблицы стилей, которая работает (возможно, я пропустил пару узлов во время уборки, чтобы задать этот вопрос, Извините)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version='1.0'  xmlns:HB='urn:schemas-basda-org:2001:eBUILD:1.00' xmlns:si='urn:schemas-basda-org:2000:salesInvoice:xdr:3.01' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:env="http://xml.kerridgecs.net/K809/k8msgEnvelope">
  <xsl:output encoding='iso-8859-1' method='html' />


	<xsl:variable name="document-version">
		Testing
	</xsl:variable>

  <xsl:template match='/'>
    <html>
      <head>
		<!-- Define the title (seen in the browser title bar-->
		<title><xsl:copy-of select="$document-version" /></title>
      </head>
      <body>
			<table width='100%'>
				<tr>				
					<td style='font-family:verdana;font-size:10pt;color:navy;text-align:right;font-weight:bold'>
						DESTINATION BRANCH<br><font size='5'>I WANT THE BRANCH NUMBER TO APPEAR HERE</font></br>
					</td>
				</tr>
				<tr style='height:10'>
					<td></td>
					<td></td>
				</tr>
			</table>
        <xsl:apply-templates select='//si:Invoice' />
      </body>
    </html>
  </xsl:template>
  <xsl:template match='si:Invoice'>
    <table>
     <tr>
        <td>
          <table>
            <tr>
             <td>
                <xsl:value-of select='si:InvoiceReferences/si:BuyersOrderNumber' />
                <xsl:if test='not(string-length(si:InvoiceReferences/si:BuyersOrderNumber))'>
                  <div class='warn'>Missing essential data.</div>
                </xsl:if>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
  </xsl:template>
</xsl:stylesheet>


Что я уже пробовал:

Я попробовал несколько комбинаций, я искал пространство имен, (я подозреваю, что это будет ответ...), добавил
xmlns:env="http://xml.kerridgecs.net/K809/k8msgEnvelope"
потом попробовал
<xsl:value-of select='env:destination/@branch' />
или
<xsl:value-of select='env:envelope/env:destination/@branch' />


Я пробовал идти по полному пути...
<xsl:value-of select='/kmsg/header/env:envelope/env:destination/@branch' />

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

1 Ответов

Рейтинг:
1

MKM_Matt

Просто попробовал это, и это работает...

<xsl:value-of select='//env:destination/@branch'/>