2016-06-07 4 views
0

У меня возникли проблемы с преобразованием XML-файла с данными, не включенными в определенные теги, с использованием XSLT. Вот пример того, что я пытаюсь сделать: вводПреобразование данных xml с использованием xslt

XML:

<test> 
    <h1>some text here</h1> 
    <h4 class="orange">Other text here</h4> 
    TEXT I WANT TO HAVE ACCESS TO 
    <personalTag/> 
</test> 

XSLT файл:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:template match="/"> 
    <p> h1 text : <xsl:value-of select="test/h1"/> </p> 
    <p> h4 text : <xsl:value-of select="test/h4"/> </p> 
    <p> direct text : <xsl:value-of select="test"/> </p> 
</xsl:template> 

Выход я хочу иметь:

<?xml version="1.0" encoding="UTF-8"?> 
<p> h1 text : some text here </p> 
<p> h4 text : other text here </p> 
<p> direct text : TEXT I WANT TO HAVE ACCESS TO </p> 

Но когда я делаю это преобразование, у меня есть этот результат. XML:

<?xml version="1.0" encoding="UTF-8"?> 
<p> h1 text : some text here </p> 
<p> h4 text : other text here </p> 
<p> direct text :some text here other text here TEXT I WANT TO HAVE ACCESS TO </p> 

У кого-нибудь есть идея, как это сделать? Заранее спасибо.

P.S: Название может быть недостаточно ясным, но я не знал, как объяснить проблему, с которой я столкнулся.

ответ

1

Вы ищете функции text(), которая возвращает только текст непосредственно связанный с указанным узлом:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
    <p> h1 text  : <xsl:value-of select="test/h1" /> </p> 
    <p> h4 text  : <xsl:value-of select="test/h4" /> </p> 
    <p> all test text : <xsl:value-of select="test"  /> </p> 
    <p> direct text : <xsl:value-of select="test/text()"/> </p> 
    </xsl:template> 
+0

она прекрасно работает. благодаря – Hackmania15

Смежные вопросы