Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT,将某些前缀为lt/gt的标记更改为<&燃气轮机;还有一些仍然使用lt/gt_Xml_Xslt - Fatal编程技术网

Xml XSLT,将某些前缀为lt/gt的标记更改为<&燃气轮机;还有一些仍然使用lt/gt

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>&lt;upg:Request xmlns:upg="http://bssys.

也许有人能帮我决定一项任务:) 我有输入xml,例如:

<n0:sendRequests xmlns:n0="http://upg.sbns.bssys.com/" xmlns:prx="urn:sap.com:proxy:DAX:/1SAI/TAS530E8C549ADDED8C7693:740">
    <n0:requests>&lt;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"&gt;&lt;upg:Models&gt;&lt;upg:Model&gt;&lt;StatementRequest xmlns="http://bssys.com/sbns/integration"&gt;&lt;docId&gt;90095&lt;/docId&gt;&lt;docDate&gt;2020-09-10&lt;/docDate&gt;&lt;docNumber&gt;90095&lt;/docNumber&gt;&lt;orgId&gt;6c74b51b-fb90-4270-8a1b-ae07177a8905&lt;/orgId&gt;&lt;orgInn&gt;7736050003&lt;/orgInn&gt;&lt;orgName&gt;JSC Company&lt;/orgName&gt;&lt;fromDate&gt;2020-05-11&lt;/fromDate&gt;&lt;toDate&gt;2020-05-11&lt;/toDate&gt;&lt;accounts&gt; &lt;Acc&gt;&lt;account&gt;40702810500010000848&lt;/account&gt;&lt;bankBIC&gt;044525220&lt;/bankBIC&gt;&lt;bankName&gt;ABR&lt;/bankName&gt;&lt;orgName&gt;JSC Company&lt;/orgName&gt;&lt;/Acc&gt;&lt;/accounts&gt;&lt;signCollection&gt;&lt;SignCollection&gt;&lt;/SignCollection&gt;&lt;/signCollection&gt;&lt;/StatementRequest&gt;&lt;/upg:Model&gt;&lt;/upg:Models&gt;&lt;/upg:Request&gt;
    </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">&lt;![CDATA[ </xsl:text>
            <xsl:value-of select="." disable-output-escaping="yes"/>
            <xsl:text disable-output-escaping="yes">]]&gt;</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>&lt;StatementRequest 
              xmlns=&quot;http://bssys.com/sbns/integration&quot;&gt; 
        &lt;orgId&gt;b14a6b8c-54ba-45af-8420-fdac775f6fe5&lt;/orgId&gt; 
        &lt;accounts&gt; 
                    &lt;Acc&gt; 
                               &lt;account&gt;40702810200000005400&lt;/account&gt; 
                               &lt;bankBIC&gt;044030861&lt;/bankBIC&gt; 
                    &lt;/Acc&gt; 
        &lt;/accounts&gt; 
        &lt;docDate&gt;2020-09-08&lt;/docDate&gt; 
        &lt;docId&gt;13131312-1fe4-11ea-9220-000c29bc93aa&lt;/docId&gt; 
        &lt;docNumber&gt;133&lt;/docNumber&gt; 
        &lt;fromDate&gt;2020-09-01&lt;/fromDate&gt; 
        &lt;orgInn&gt;7810356897&lt;/orgInn&gt; 
        &lt;orgName&gt;ЗАО  &quot;JSC Company&quot;&lt;/orgName&gt; 
        &lt;toDate&gt;2020-09-02&lt;/toDate&gt; 
        &lt;signCollection&gt;
        &lt;SignCollection/&gt;
        &lt;/signCollection&gt;
        &lt;/StatementRequest&gt; 
</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>&lt;StatementRequest 
              xmlns=&quot;http://bssys.com/sbns/integration&quot;&gt;
...
&lt;/StatementRequest&gt; 
</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,这是没有意义的。