繁体   English   中英

是否可以/如何使用XSLT 2.0将字符串XML转换为XML?

[英]Is it possible/How to convert string XML to XML using XSLT 2.0?

我有一个未格式化的字符串XML,必须使用XSLT 2.0将其转换为XML

下面是示例未格式化的字符串XML。我尝试了很少的XSLT,但没有像添加disable-output-escaping那样工作。没有显示Tag开头符号(<),而是显示了<<。将“ <”替换为“ <”

<?xml version = "1.0" encoding = "UTF-8"?>
<ns0:Message xmlns:ns0 = "http://www.àbc.com/abc/Message_V2.xsd">
    <ns0:Payload>
        &lt;ns:EXPINV02-ZEXPINV2-4x xmlns:ae="http://www.àbc.com/abc/05" 
    xmlns:ns="http://www.àbc.com/abc/IDOCS" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:type="ns:EXP">            
   &lt;EDI__DC>&lt;TABNAM>EDI_DC40&lt;/TABNAM>&lt;MANDT>510&lt;/MANDT>
  &lt;DOCNUM>0000000058569441&lt;/DOCNUM>&lt;DOCREL>740&lt;/DOCREL>
  &lt;STATUS>30&lt;/STATUS>&lt;DIRECT>1&lt;/DIRECT>&lt;OUTMOD>
  2&lt;/OUTMOD>&lt;EXPRSS xsi:nil="true"/>&lt;TEST 
  xsi:nil="true"/>&lt;IDOCTYP>EXPINV02&lt;/IDOCTYP>
  &lt;CIMTYP>ZEXPINV2&lt;/CIMTYP>&lt;MESTYP>ZINVOICE0&lt;/MESTYP>
  &lt;MESCOD xsi:nil="true"/>&lt;MESFCT xsi:nil="true"/>
  &lt;STD xsi:nil="true"/>&lt;STDVRS 
  xsi:nil="true"/>&lt;STDMES>ZINVOI&lt;/STDMES>
  &lt;SNDPOR>SAPNEQ&lt;/SNDPOR>&lt;SNDPRT>LS&lt;/SNDPRT>&lt;SNDPFC 
  xsi:nil="true"/>&lt;SNDPRN>NEQ510&lt;/SNDPRN>&lt;SNDSAD 
  xsi:nil="true"/>&lt;SNDLAD 
  xsi:nil="true"/>&lt;RCVPOR>NXPINVOICE&lt;/RCVPOR>&lt;RCVPRT>
  LS&lt;/RCVPRT>&lt;RCVPFC 
  xsi:nil="true"/>&lt;RCVPRN>PSFFORMSCA&lt;/RCVPRN>&lt;RCVSAD 
  xsi:nil="true"/>&lt;RCVLAD 
  xsi:nil="true"/>&lt;CREDAT>20190715&lt;/CREDAT>&lt;CRETIM>
  152902&lt;/CRETIM>&lt;REFINT xsi:nil="true"/>&lt;REFGRP 
  xsi:nil="true"/>&lt;REFMES xsi:nil="true"/>&lt;ARCKEY 
  xsi:nil="true"/>&lt;SERIAL>20190528064107&lt;/SERIAL>&lt;/EDI__DC>
    </ns0:Payload>
</ns0:Message>

预期输出如下:

 <?xml version = "1.0" encoding = "UTF-8"?>
 <ns0:Message xmlns:ns0 = "http://www.àbc.com/abc/Message_V2.xsd">
    <ns0:Payload>
        <ns:EXPINV02-ZEXPINV2-4x xmlns:ae="http://www.àbc.com/abc/05" 
   xmlns:ns="http://www.àbc.com/abc/IDOCS" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:type="ns:EXP">
            <EDI__DC><TABNAM>EDI_DC40</TABNAM><MANDT>510</MANDT> 
  <DOCNUM>0000000058569441</DOCNUM><DOCREL>740</DOCREL> 
  <STATUS>30</STATUS><DIRECT>1</DIRECT><OUTMOD>2</OUTMOD><EXPRSS 
  xsi:nil="true"/><TEST xsi:nil="true"/><IDOCTYP>EXPINV02</IDOCTYP> 
  <CIMTYP>ZEXPINV2</CIMTYP><MESTYP>ZINVOICE0</MESTYP><MESCOD 
  xsi:nil="true"/><MESFCT xsi:nil="true"/><STD xsi:nil="true"/><STDVRS 
  xsi:nil="true"/><STDMES>ZINVOI</STDMES><SNDPOR>SAPNEQ</SNDPOR> 
  <SNDPRT>LS</SNDPRT><SNDPFC xsi:nil="true"/><SNDPRN>NEQ510</SNDPRN> 
  <SNDSAD xsi:nil="true"/><SNDLAD xsi:nil="true"/> 
  <RCVPOR>NXPINVOICE</RCVPOR><RCVPRT>LS</RCVPRT><RCVPFC xsi:nil="true"/> 
  <RCVPRN>PSFFORMSCA</RCVPRN><RCVSAD xsi:nil="true"/><RCVLAD 
  xsi:nil="true"/><CREDAT>20190715</CREDAT><CRETIM>152902</CRETIM><REFINT 
   xsi:nil="true"/><REFGRP xsi:nil="true"/><REFMES xsi:nil="true"/> 
  <ARCKEY 
   xsi:nil="true"/><SERIAL>20190528064107</SERIAL></EDI__DC>
    </ns0:Payload>
  </ns0:Message>

在XSLT 3.0中,可以使用parse-xml() XSLT 2.0中没有保证可移植的方式。 有些处理器可能提供类似于parse-xml()的扩展功能,有些可能允许您实现自己的扩展功能,有些可能支持document()函数中的“数据” URI方案。

Check Following Code:-

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
    <xsl:output method="xml" indent="yes" use-character-maps="angle-brackets"/>
<xsl:character-map name="angle-brackets">
    <xsl:output-character character="&lt;" string="&lt;"/>
    <xsl:output-character character="&gt;" string="&gt;"/>
</xsl:character-map>
<xsl:strip-space elements="*"/>
<xsl:template match="Plugins">
    <xsl:copy>
        <xsl:apply-templates select="Configuration"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="Configuration">
    <xsl:variable name="input">
        <xsl:value-of select="."/>
    </xsl:variable>
    <xsl:apply-templates select="document(concat('data:text/xml,',$input))"/>
</xsl:template>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM