将 XML 提取到另一个具有多条记录的 xml 中

Extract XML inside another xml having multiple records

我正在从 JDBC 服务器中提取 clob 数据,下面是 xml

的示例格式

1

<?xml version="1.0" encoding="utf-8"?>
<Sales_Posting>
<row>
<ORGANIZATION_ID>1</ORGANIZATION_ID>
<RTL_LOC_ID>269</RTL_LOC_ID>
<POSLOG_DATA>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
        &lt;POSLog xmlns=&quot;http://www.nrf-arts.org/IXRetail/namespace/&quot;
             xmlns:dtv=&quot;http://www.datavantagecorp.com/xstore/&quot;
             xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
             xs:schemaLocation=&quot;http://www.nrf-arts.org/IXRetail/namespace/ POSLog.xsd&quot; &gt;
&lt;Transaction xmlns:dtv=&quot;http://www.datavantagecorp.com/xstore/&quot; CancelFlag=&quot;true&quot; OfflineFlag=&quot;false&quot; TrainingModeFlag=&quot;false&quot; dtv:AppVersion=&quot;17.0.0.0.716 - 0.0.0 - 0.0&quot; dtv:TransactionType=&quot;RETAIL_SALE&quot; &gt;
&lt;dtv:OrganizationID&gt;&lt;![CDATA[1]]&gt;&lt;/dtv:OrganizationID&gt;
&lt;RetailStoreID&gt;&lt;![CDATA[269]]&gt;&lt;/RetailStoreID&gt;
&lt;WorkstationID&gt;&lt;![CDATA[2]]&gt;&lt;/WorkstationID&gt;
&lt;/Transaction&gt;
&lt;/POSLog&gt;</POSLOG_DATA>
        <CREATE_DATE>2019-07-17 20:57:56.536</CREATE_DATE>
    </row>
<row>
    <ORGANIZATION_ID>1</ORGANIZATION_ID>
    <RTL_LOC_ID>269</RTL_LOC_ID>
    <POSLOG_DATA>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
        &lt;POSLog xmlns=&quot;http://www.nrf-arts.org/IXRetail/namespace/&quot;
             xmlns:dtv=&quot;http://www.datavantagecorp.com/xstore/&quot;
             xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
             xs:schemaLocation=&quot;http://www.nrf-arts.org/IXRetail/namespace/ POSLog.xsd&quot; &gt;
&lt;Transaction xmlns:dtv=&quot;http://www.datavantagecorp.com/xstore/&quot; CancelFlag=&quot;false&quot; OfflineFlag=&quot;false&quot; TrainingModeFlag=&quot;false&quot; dtv:AppVersion=&quot;17.0.0.0.716 - 0.0.0 - 0.0&quot; dtv:TransactionType=&quot;RETAIL_SALE&quot; &gt;
&lt;dtv:OrganizationID&gt;&lt;![CDATA[1]]&gt;&lt;/dtv:OrganizationID&gt;
&lt;RetailStoreID&gt;&lt;![CDATA[269]]&gt;&lt;/RetailStoreID&gt;
&lt;WorkstationID&gt;&lt;![CDATA[2]]&gt;&lt;/WorkstationID&gt;
&lt;/Transaction&gt;
&lt;/POSLog&gt;</POSLOG_DATA>
    <CREATE_DATE>2019-07-18 06:20:38.014</CREATE_DATE>
</row>
</Sales_Posting>

我需要拉取标签里面的xml。

对于单个记录,我可以使用以下代码提取数据

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" indent="yes"/>
    <xsl:template match="/">
        <xsl:value-of select="/Sales_Posting/row/POSLOG_DATA"/>
    </xsl:template>
</xsl:stylesheet>

但我需要它用于多条记录。

XSLT 1.0 更可取。如果可以通过多个 xslt 映射获得结果,那么这对我来说也很好。

预期输出为:-

2

<?xml version="1.0" encoding="utf-8"?>
<Sales_Posting>
    <row>
        <POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/"
        xmlns:dtv="http://www.datavantagecorp.com/xstore/"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xs:schemaLocation="http://www.nrf-arts.org/IXRetail/namespace/ POSLog.xsd">
       <Transaction CancelFlag="true"
                OfflineFlag="false"
                TrainingModeFlag="false"
                dtv:AppVersion="17.0.0.0.716 - 0.0.0 - 0.0"
                dtv:TransactionType="RETAIL_SALE">
      <dtv:OrganizationID>1</dtv:OrganizationID>
      <RetailStoreID>269</RetailStoreID>
      <WorkstationID>2</WorkstationID>
   </Transaction>
</POSLog>
</row>
<row>
    <POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/"
        xmlns:dtv="http://www.datavantagecorp.com/xstore/"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xs:schemaLocation="http://www.nrf-arts.org/IXRetail/namespace/ POSLog.xsd">
       <Transaction CancelFlag="true"
                OfflineFlag="false"
                TrainingModeFlag="false"
                dtv:AppVersion="17.0.0.0.716 - 0.0.0 - 0.0"
                dtv:TransactionType="RETAIL_SALE">
      <dtv:OrganizationID>1</dtv:OrganizationID>
      <RetailStoreID>269</RetailStoreID>
      <WorkstationID>2</WorkstationID>
   </Transaction>
</POSLog>
</row>
</Sales_Posting>

我正在分享源结构的图像以及预期的目标结构。请帮忙。

尝试:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/Sales_Posting">
    <xsl:copy>
        <xsl:for-each select="row">
            <xsl:copy>
                <xsl:value-of select="substring-after(POSLOG_DATA, '?>')" disable-output-escaping="yes"/>
            </xsl:copy>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

在进一步处理之前必须将结果保存到文件中。这是假设您的处理器支持 disable-output-escaping