Xml XSLT,将某些前缀为lt/gt的标记更改为<&燃气轮机;还有一些仍然使用lt/gt
也许有人能帮我决定一项任务:) 我有输入xml,例如:Xml XSLT,将某些前缀为lt/gt的标记更改为<&燃气轮机;还有一些仍然使用lt/gt,xml,xslt,Xml,Xslt,也许有人能帮我决定一项任务:) 我有输入xml,例如: <n0:sendRequests xmlns:n0="http://upg.sbns.bssys.com/" xmlns:prx="urn:sap.com:proxy:DAX:/1SAI/TAS530E8C549ADDED8C7693:740"> <n0:requests><upg:Request xmlns:upg="http://bssys.
<n0:sendRequests xmlns:n0="http://upg.sbns.bssys.com/" xmlns:prx="urn:sap.com:proxy:DAX:/1SAI/TAS530E8C549ADDED8C7693:740">
<n0:requests><upg:Request xmlns:upg="http://bssys.com/upg/request" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" requestId="55555555-5555-5555-5555-550000090095" version="1" sender="1" receiver="1"><upg:Models><upg:Model><StatementRequest xmlns="http://bssys.com/sbns/integration"><docId>90095</docId><docDate>2020-09-10</docDate><docNumber>90095</docNumber><orgId>6c74b51b-fb90-4270-8a1b-ae07177a8905</orgId><orgInn>7736050003</orgInn><orgName>JSC Company</orgName><fromDate>2020-05-11</fromDate><toDate>2020-05-11</toDate><accounts> <Acc><account>40702810500010000848</account><bankBIC>044525220</bankBIC><bankName>ABR</bankName><orgName>JSC Company</orgName></Acc></accounts><signCollection><SignCollection></SignCollection></signCollection></StatementRequest></upg:Model></upg:Models></upg:Request>
</n0:requests>
<n0:sessionId>0174774e-e79f-19d8-bf28-5e423cf0d53c</n0:sessionId>
</n0:sendRequests>
upg:Request xmlns:upg=”http://bssys.com/upg/request“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“requestId=“555555-5555-5555-5555-55000009095”version=“1”sender=“1”receiver=“1”upg:Modelsupg:ModelStatementRequest xmlns=”http://bssys.com/sbns/integration"docId90095/docIddocDate2020-09-10/docDatedocNumber90095/DocNumberGid6C74B51B-fb90-4270-8a1b-ae07177a8905/orgIdorgInn7736050003/OrginorgNameJSC Company/orgNamefromDate2020-05-11/fromDatetoDate2020-05-11/ToDateAccountsAccounts4070281050000848/accountbankBIC044525220/bankBICbankNameABR/bankNameorgNameJSC公司/orgName/Acc/AccountsSignCollectionsSignCollection/SignCollection/SignCollection/StatementRequest/upg:Model/upg:Models/upg:Request
0174774e-e79f-19d8-bf28-5e423cf0d53c
我有xslt映射:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:upg="http://upg.sbns.bssys.com/" xmlns:n0="http://upg.sbns.bssys.com/">
<xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="n0:requests">
<xsl:copy>
<xsl:text disable-output-escaping="yes"><![CDATA[ </xsl:text>
<xsl:value-of select="." disable-output-escaping="yes"/>
<xsl:text disable-output-escaping="yes">]]></xsl:text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>`
![CDATA[
]]
`
输出应为:
<n0:sendRequests>
<n0:requests><![CDATA[
<upg:Request requestId="13131313-0000-1111-2211-001111111111" version="1" sender="1"
receiver="1" xmlns:upg="http://bssys.com/upg/request"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<upg:Models>
<upg:Model><StatementRequest
xmlns="http://bssys.com/sbns/integration">
<orgId>b14a6b8c-54ba-45af-8420-fdac775f6fe5</orgId>
<accounts>
<Acc>
<account>40702810200000005400</account>
<bankBIC>044030861</bankBIC>
</Acc>
</accounts>
<docDate>2020-09-08</docDate>
<docId>13131312-1fe4-11ea-9220-000c29bc93aa</docId>
<docNumber>133</docNumber>
<fromDate>2020-09-01</fromDate>
<orgInn>7810356897</orgInn>
<orgName>ЗАО "JSC Company"</orgName>
<toDate>2020-09-02</toDate>
<signCollection>
<SignCollection/>
</signCollection>
</StatementRequest>
</upg:Model>
</upg:Models>
</upg:Request>
]]></n0:requests>
<n0:sessionId>01746e15-004e-14f5-b4e6-f6c8b357e000</n0:sessionId>
</n0:sendRequests>
声明请求
xmlns=”http://bssys.com/sbns/integration"
orgIdb14a6b8c-54ba-45af-8420-fdac775f6fe5/orgId
账户
行政协调会
账户40702810200000005400/账户
bankBIC044030861/bankBIC
/行政协调会
/帐目
docDate 2020-09-08/docDate
文件编号13131312-1fe4-11ea-9220-000c29bc93aa/文件编号
文件编号133/文件编号
fromDate 2020-09-01/fromDate
奥金7810356897/奥金酒店
orgName 3Aö“JSC公司”/orgName
toDate 2020-09-02/toDate
招牌收集
招牌收集/
/招牌收集
/声明请求
]]>
01746e15-004e-14f5-b4e6-f6c8b357e000
内部标记n0:需要为前缀为upg:的标记替换</>到,并为其他没有前缀的标记保留</>(示例不清楚您的问题是什么。您的样式表实际上没有任何作用。转义XML在语义上等同于CDATA节中包含的XML。您可以通过执行以下操作更简单、更优雅地获得相同的结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:n0="http://upg.sbns.bssys.com/" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" cdata-section-elements="n0:requests"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您预期的输出显示一个CDATA部分,其中一些XML内容被转义,这没有任何意义
一般来说,当您有一个表示XML的字符串(无论是转义的还是包含在CDATA中的)并且希望更改该字符串的XML内容时,最好先将该字符串转换为XML,然后使用XSLT进行正常处理。否则,您将受限于字符串操作,这非常繁琐且容易出错。您将被拒绝用输入和输出中的词法XML来讨论这个问题,但XSLT的观点是错误的:您需要考虑XSLT从解析器接收节点树,然后将节点树传递给序列化程序 请注意,您的示例输出包含
<upg:Model><StatementRequest
xmlns="http://bssys.com/sbns/integration">
...
</StatementRequest>
</upg:Model>
StatementRequest
xmlns=”http://bssys.com/sbns/integration"
...
/声明请求
表示与相同的节点树
<upg:Model><![CDATA[<StatementRequest
xmlns="http://bssys.com/sbns/integration">
...
</StatementRequest>]]>
</upg:Model>
...
]]>
这些只是同一结果树的不同序列化,就XSLT而言,它们是相同的
使用现代XSLT处理器(XSLT 3.0),您可以使用以下构造构造这样的结果:
<upg:Model>
<xsl:variable name="temp">
<StatementRequest
xmlns="http://bssys.com/sbns/integration">
...
</StatementRequest>
</xsl:variable>
<xsl:value-of select="serialize($temp)"/>
</upg:Model>
...
但是serialize()函数在早期的XSLT版本中不可用。输入消息不包含CDATA,我应该添加他。在CDATA中,我应该将</$gt替换为前缀为upg的标记:但此文本包含标记,例如StatementRequest,对于此标记,我应该保留<。我想您不明白我在说什么。CDATA中的XML是sa我把它称为转义XML。你说你想在CDATA中转义XML。那将是转义两次的XML,这是没有意义的。