将 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><?xml version="1.0" encoding="UTF-8"?>
<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 xmlns:dtv="http://www.datavantagecorp.com/xstore/" CancelFlag="true" OfflineFlag="false" TrainingModeFlag="false" dtv:AppVersion="17.0.0.0.716 - 0.0.0 - 0.0" dtv:TransactionType="RETAIL_SALE" >
<dtv:OrganizationID><![CDATA[1]]></dtv:OrganizationID>
<RetailStoreID><![CDATA[269]]></RetailStoreID>
<WorkstationID><![CDATA[2]]></WorkstationID>
</Transaction>
</POSLog></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><?xml version="1.0" encoding="UTF-8"?>
<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 xmlns:dtv="http://www.datavantagecorp.com/xstore/" CancelFlag="false" OfflineFlag="false" TrainingModeFlag="false" dtv:AppVersion="17.0.0.0.716 - 0.0.0 - 0.0" dtv:TransactionType="RETAIL_SALE" >
<dtv:OrganizationID><![CDATA[1]]></dtv:OrganizationID>
<RetailStoreID><![CDATA[269]]></RetailStoreID>
<WorkstationID><![CDATA[2]]></WorkstationID>
</Transaction>
</POSLog></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
。
我正在从 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><?xml version="1.0" encoding="UTF-8"?>
<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 xmlns:dtv="http://www.datavantagecorp.com/xstore/" CancelFlag="true" OfflineFlag="false" TrainingModeFlag="false" dtv:AppVersion="17.0.0.0.716 - 0.0.0 - 0.0" dtv:TransactionType="RETAIL_SALE" >
<dtv:OrganizationID><![CDATA[1]]></dtv:OrganizationID>
<RetailStoreID><![CDATA[269]]></RetailStoreID>
<WorkstationID><![CDATA[2]]></WorkstationID>
</Transaction>
</POSLog></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><?xml version="1.0" encoding="UTF-8"?>
<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 xmlns:dtv="http://www.datavantagecorp.com/xstore/" CancelFlag="false" OfflineFlag="false" TrainingModeFlag="false" dtv:AppVersion="17.0.0.0.716 - 0.0.0 - 0.0" dtv:TransactionType="RETAIL_SALE" >
<dtv:OrganizationID><![CDATA[1]]></dtv:OrganizationID>
<RetailStoreID><![CDATA[269]]></RetailStoreID>
<WorkstationID><![CDATA[2]]></WorkstationID>
</Transaction>
</POSLog></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
。