[英]Is it possible/How to convert string XML to XML using XSLT 2.0?
I have a unformatted string XML, which has to be converted to XML using XSLT 2.0 我有一个未格式化的字符串XML,必须使用XSLT 2.0将其转换为XML
Below is the sample unformatted string XML.I tried few XSLT but didnt worked like adding the disable-output-escaping.The Tag opening symbol(<) is not getting displayed,instead of that still the "<" is displayed.So basically need to replace "<" to "<" 下面是示例未格式化的字符串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>
<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>
Expected Output is below: 预期输出如下:
<?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>
In XSLT 3.0 you can use parse-xml()
. 在XSLT 3.0中,可以使用parse-xml()
。 There's no guaranteed-portable way of doing it in XSLT 2.0. XSLT 2.0中没有保证可移植的方式。 Some processors may offer an extension function similar to parse-xml()
, some may allow you to implement your own extension functions, some may support the "data" URI scheme in the document()
function. 有些处理器可能提供类似于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="<" string="<"/>
<xsl:output-character character=">" string=">"/>
</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.