2016-06-17 2 views
0

Я работаю над картой XSLT, чтобы сгенерировать целевую структуру того, что отправляется в исходном поле OUTPUT_XML.Запрос сценария XSLT для заполнения многострочных записей

Это мой источник структура, которая имеет два ряда

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:Customer xmlns:ns0="urn:customer"> 
    <row> 
     <OUTPUT_XML><response><test>123</test></response></OUTPUT_XML> 
    </row> 
    <row> 
     <OUTPUT_XML><response><test>456</test></response></OUTPUT_XML> 
    </row> 
</ns0:Customer> 

код XSLT

<?xml version='1.0' encoding='utf-8' ?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="urn:customer" > 

    <xsl:template match="/"> 

      <xsl:value-of select="ns0:Customer/row/OUTPUT_XML" disable-output-escaping="yes"/> 

    </xsl:template> 
</xsl:stylesheet> 

С помощью этого кода, я всегда получаю выход только 1-й записи, как показано ниже.

выход XSLT

<?xml version="1.0" encoding="utf-8"?> 
<response> 
    <test>123</test> 
</response> 

Можете ли вы посоветовать код XSLT, чтобы заполнить несколько записей.

Ожидаемый результат

<?xml version="1.0" encoding="utf-8"?> 
<response> 
    <test>123</test> 
    <test>456</test> 
</response> 
+0

Можете ли вы представить более ясный вопрос. Выход невозможен для xsl, который вы указали, и xsl является неполным. Значение xsl: value-of не используется для создания тегов xml, и даже если бы оно могло сделать что-то подобное, это создало бы результат, который не был корректно сформирован на основе вашего ввода. –

+0

Привет, Фил, спасибо за ответ. В настоящее время я работаю с кодом, который я предоставил. Поскольку значение в поле находится под тегами CDATA. –

+0

@VarunReddyK Пожалуйста, напишите ** представитель ** пример. Если входной XML содержит разделы CDATA, покажите их. –

ответ

0

Изменение XSL к этому ...

<xsl:template match="/"> 
    <xsl:apply-templates select="ns0:Customer/row/OUTPUT_XML"/> 
</xsl:template> 

<xsl:template match="OUTPUT_XML"> 
    <xsl:value-of select="." disable-output-escaping="yes"/> 
</xsl:template> 

Метод вывода необходимо будет текст для этой работы becuase результат не будет хорошо сформированный для нескольких строк/OUTPUT_XML

Если вы хотите xml out, вам понадобится t о включают в себя корневой узел на выходе

<xsl:template match="/"> 
    <e> 
     <xsl:apply-templates select="ns0:Customer/row/OUTPUT_XML"/> 
    </e> 
</xsl:template> 

<xsl:template match="OUTPUT_XML"> 
    <xsl:value-of select="." disable-output-escaping="yes"/> 
</xsl:template> 
+0

Спасибо, фил, ваш код работал. Но я думаю, что я сделал ошибку здесь. Ответ - это корневой узел, поэтому его следует повторить. –

+0

@ Фил. Можете ли вы предложить, какие изменения нужно внести, чтобы получить желаемый результат? –

+0

«* Метод вывода должен быть текстовым для этого, потому что результат не будет хорошо сформирован для нескольких строк/OUTPUT_XML * «Нет. Результат преобразования XSLT * может * быть фрагментом дерева результатов. –

0

Попробуйте так:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns0="urn:customer" 
exclude-result-prefixes="ns0"> 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/ns0:Customer"> 
    <response> 
     <xsl:apply-templates/> 
    </response> 
</xsl:template> 

<xsl:template match="row"> 
    <test> 
     <xsl:value-of select="OUTPUT_XML/response/test" /> 
    </test> 
</xsl:template> 

</xsl:stylesheet> 

Или, если вы предпочитаете:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns0="urn:customer" 
exclude-result-prefixes="ns0"> 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:template match="/ns0:Customer"> 
    <response> 
     <xsl:for-each select="row"> 
      <test> 
       <xsl:value-of select="OUTPUT_XML/response/test" /> 
      </test> 
     </xsl:for-each> 
    </response> 
</xsl:template> 

</xsl:stylesheet> 
+0

- входной контентный узел OUTPUT_XML содержит CDATA. Да, я знаю, что это не ясно в вопросе, но это было указано в ответе на один из моих комментариев. –

+0

@PhilB Ну, это зависит от того, что именно является CDATA. Пусть OP отредактирует вопрос и покажет нам. –

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