Получение атрибута из 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' />
Очевидно, я что-то упускаю. Вся помощь оценена по достоинству и заранее благодарна.