Удалить escape-символы - PullRequest
       8

Удалить escape-символы

0 голосов
/ 01 февраля 2019

Я хочу удалить escape-символ из моего входного XML. Ниже указан мой входной XML

<?xml version="1.0" encoding="utf-8"?>
<AsBuiltWOEstimates_response>
<STATEMENT_TEST_response><xml_response>&lt; header&gt;&lt;wonum&gt;20000000346&lt;/wonum&gt;&lt;success&gt;F&lt;/success&gt;&lt;/header&gt;&lt;error&gt;&lt;line&gt;&lt;/line&gt; &lt;message&gt; LINE 1215 : Sub Account is null or blank : Work Order does not exist : Could not derive Business Segment from WO Header : Sub Account does not exist or is invalid ||&lt;/message&gt;&lt;/error&gt;</xml_response>
</STATEMENT_TEST_response>
</AsBuiltWOEstimates_response>

Я пытался XSLT удалить символы, но при этом он также удаляет объявление XML.Следовательно это терпит неудачу, поскольку это не признает это.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
<xsl:template match="/AsBuiltWOEstimates_response">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>

Фактический результат -

<header>
<wonum>20000000346</wonum>
<success>F</success>
</header><error>
<line></line> 
<message> LINE 1215 : Sub Account is null or blank : Work Order does not exist : Could not derive Business Segment from WO Header : Sub Account does not exist or is invalid ||</message>
</error>

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

<?xml version="1.0" encoding="utf-8"?>
<AsBuiltWOEstimates_response>
<STATEMENT_TEST_response>
<header><wonum>20000000346</wonum><success>F</success></header><error><line></line> <message> LINE 1215 : Sub Account is null or blank : Work Order does not exist : Could not derive Business Segment from WO Header : Sub Account does not exist or is invalid ||</message></error>
</STATEMENT_TEST_response>
</AsBuiltWOEstimates_response>

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019
   <xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="xml_response">
    <xsl:copy>
        <xsl:value-of select="concat('&lt;', substring-after(., '&lt; '))" disable-output-escaping="yes"/>
    </xsl:copy>
</xsl:template>

Пожалуйста, проверьте этот код, потому что после '<' </p> вводится пробел.

0 голосов
/ 01 февраля 2019

Чтобы получить ожидаемый результат (приблизительно, с точки зрения отступов), вы должны сделать:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

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

</xsl:stylesheet>
...