Я пытаюсь написать XSLT для преобразования моего XML из одного формата в другой. Когда я применяю файл .xslt
к XML-файлу в VS 2010, , структура вывода XML создается без каких-либо проблем. Но он не заполняет данные, ожидаемые обработкой xsl:value-of
.Правильный способ написания xsl: значение в XSLT
Когда я использую XMLSpy
и оценить выражение XPath
, он говорит no result
для выражений в следующих XSLT. Но когда я использую функцию node()
в конце выражения XPath, она показывает значение!
- Каков правильный способ написания XPath?
node()
иtext()
вид функций, действительно необходимых каждый раз для чтения содержимого элемента (когда у него нет дочерних элементов)? Если нет, то почему XmlSpy тоже не дает результата без этих функций?- Иногда (когда я изменяю значение соответствия шаблона от «/» до «ServiceMessage») при отладке XSLT, VS 2010 переходит к встроенным правилам шаблонов. Почему это так? Как я могу избавиться от встроенных шаблонов в VS 2010?
Для примера я следовал за w3school tutorial. Я новичок в XSLT.
Вот мой XML, который я хочу преобразовать в другой формат XML.
<ServiceMessage xmlns="http://requestservice/requests" xmlns:req="http://requestservice/requests/xmlstds">
<TypeOfReq> General </TypeOfReq>
<Details>
<Id> 123456789 </Id>
<SenderDetails>
<Sender id="345"></Sender>
</SenderDetails>
</Details>
</ServiceMessage>
Это мой XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<request>
<requestType>
<xsl:value-of select="ServiceMessage/TypeOfReq" />
</requestType>
<Id>
<xsl:value-of select="ServiceMessage/Details/Id"/>
</Id>
<senderId>
<xsl:value-of select="ServiceMessage/Details/SenderDetails/Sender/@id"/>
</senderId>
</request>
</xsl:template>
</xsl:stylesheet>
Thanks @Filburt. Исправлена опечатка. – Learner