Это может быть очень простой вопрос, но его я не могу получить и отрывать свои волосы. У меня есть следующий XML:XSL и пространства имен
<?xml-stylesheet type="text/xsl" href="email.xsl"?>
<Example xmlns="">
<Name xmlns="urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1">Mark</Name>
</Example>
И пытаюсь использовать следующий XSLT:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">
<html>
<body>
<table width="90%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p>AUTOMATED CONFIRMATION: This confirmation email is unable to take replies. For further assistance please visit our Help pages or Contact us</p>
<p>Dear <xsl:value-of select="Name"/>,</p>
<p>Thank you for blah blah... </p>
</td>
</tr>
</table>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Я не могу получить имя, которое появляется, когда я использую xmlns=urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1
в кормах XML, когда я удалить xmlns
, имя отображается нормально.
Есть ли какой-то синтаксис, который мне не хватает? Я попытался добавить пространство имен к <xsl:stylesheet>
элемента:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rpg="urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1"
>
Затем, используя приставку, которую я дал в XSLT в выражении XPath:
<xsl:value-of select="Name"/>
Но это не работает. Может ли кто-нибудь помочь? Заранее спасибо.
Это плохая идея, потому что она не только неэффективна (медленная из-за сравнения строк), но и не учитывает пространства имен, что она действительно должна делать. – Lucero
... Если пространства имен релевантны (если требуется различное поведение для разных пространств имен). Если XSL представляет собой просто форматирование содержимого необработанного XML, которое вас интересует, пространство имен не так актуально и может быть проигнорировано. В примере OP пространство имен * не * предназначено для сохранения в выходном XML только текстовое содержимое элемента. Я не уверен в отношении производительности. Помните, что согласно определениям функции XPath «* [name() = name]» эквивалентно «name»; и в любом случае компилятор может свободно переписывать выражения XPath в эквивалентные для оптимизации. – user268396
+1 Это не плохой или неправильный ответ, который заслуживает отрицательного результата. Это имеет некоторые последствия, но они были названы. Аргумент производительности сильно зависит от того, сколько детей имеет текущий узел и насколько хорошо оптимизирован XSLT-процессор.Аргумент namespace сильно зависит от того, заботитесь вы или нет. ;) – Tomalak