是否可以/如何使用XSLT2.0将字符串XML转换为XML?

是否可以/如何使用XSLT2.0将字符串XML转换为XML?,xml,string,xslt,Xml,String,Xslt,我有一个未格式化的字符串XML,必须使用 XSLT2.0 下面是未格式化字符串XML示例。我尝试了一些XSLT,但没有像添加disable-output-escaping那样工作。标记开始符号( EDI\u DC>TABNAM>EDI\u DC40/TABNAM>MANDT>510/MANDT> DOCNUM>00000000 58569441/DOCNUM>DOCREL>740/DOCREL> 状态>30/状态>直接>1/直接>输出模式> 2/OUTMOD>EXPRSS xsi:nil=“tr

我有一个未格式化的字符串XML,必须使用 XSLT2.0

下面是未格式化字符串XML示例。我尝试了一些XSLT,但没有像添加disable-output-escaping那样工作。标记开始符号( EDI\u DC>TABNAM>EDI\u DC40/TABNAM>MANDT>510/MANDT> DOCNUM>00000000 58569441/DOCNUM>DOCREL>740/DOCREL> 状态>30/状态>直接>1/直接>输出模式> 2/OUTMOD>EXPRSS xsi:nil=“true”/>测试 xsi:nil=“true”/>IDOCTYP>EXPINV02/IDOCTYP> CIMTYP>ZEXPINV2/CIMTYP>MESTYP>0/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\uu DC> 预期产出如下:

 <?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>

EDI_DC40510
0000000058569441740 
3012EXPIV02
ZEXPINV2ZINVOICE0ZINVOISAPNEQ
LSNEQ510
NXPINVOICELS
PSFFORMSCA20190715152902
20190528064107
检查以下代码:-
检查以下代码:-

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

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

实际上是“”\"symbol Get Displayed convert to file text然后convert xml是否可以升级到XSLT 3.0?如果可以,您可以使用
解析xml
来执行此操作。话虽如此,转义的xml缺少结尾
EXPINV02-ZEXPINV2-4x
标记,因此目前实际上无效。谢谢!
禁用输出转义
应该可以工作-但是转义字符串缺少结束标记,因此结果将不是格式良好的XML文档。实际上是“”\"symbol Get Displayed convert to file text然后convert xml是否可以升级到XSLT 3.0?如果可以,您可以使用
解析xml
来执行此操作。话虽如此,转义的xml缺少结尾
EXPINV02-ZEXPINV2-4x
标记,因此目前实际上无效。谢谢!
禁用输出转义
应该可以工作-但是转义字符串缺少结束标记
,因此结果将不是格式良好的XML文档。此解决方案取决于支持document()函数中的“data:”URI方案的处理器,这一点绝对不能保证。此解决方案取决于支持“data:”的处理器:document()函数中的URI方案,这是绝对不能保证的。
 <?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>
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>