Получение "префикса' soap 'не определено" в файле xslt
Я пытаюсь преобразовать строку с данными xml (ответ от веб-службы). Я попытался начать просто, просто получив имя:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<table>
<tr>
<th>Name</th>
</tr>
<xsl:for-each select="soap:Envelope/soap:Body/ABRSearchByABNResponse/ABRPayloadSearchResults/response/legalName/">
<tr>
<td>
<xsl:value-of select="givenName"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
однако я получаю "префикс' soap 'не определен", как это исправить? Спасибо.
2 ответов
в XSLT любой префикс пространства имен, используемый в выражении XPath, должен быть определен в соответствующем объявлении пространства имен.
это не относится к вашему коду и, следовательно, к ошибке.
решение:
объявите пространство имен soap:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:soap="http://soap/envelope/"
>
префикс пространства имен soap
в вашем случае это просто сокращение для реального URI пространства имен. Чтобы избежать Вас есть http://soap/envelope/
везде, вы можете определить один раз, что soap
расшифровывается как http://soap/envelope/
, и использовать soap
в остальной части документа.
это означает, что если вы используете префикс пространства имен, он должен быть определен так, что реальное пространство может быть найдено.
вы также можете объявить, что pizza
соответствует http://soap/envelope/
и использовать это вместо этого. The soap
префикс пространства имен ничего особенного.