[英]How to copy parent node namespace to child element using xslt?
我的 xml 看起來像我使用 Java JAXBContext 和 Marshaller 創建的。 我想格式化 xml 的某些部分,而不是整個 xml。
<?xml version="1.0" encoding="UTF-8"?>
<ns4:Requests xmlns:ns2="http://www.dummy.com/xsd/tublu/murmur_001" xmlns:ns3="http://www.dummy.com/xsd/CommonObjects_001" xmlns:ns4="http://www.dummy.com/xsd/naku_001">
<ns4:RequestSetId>fhskgvseruigiu</ns4:RequestSetId>
<ns4:RequestStream>CHAPP</ns4:RequestStream>
<ns4:Request>
<ns4:TrackAndTrace>
<ns4:CPAId>003</ns4:CPAId>
<ns4:CorrelationId>ytuty</ns4:CorrelationId>
</ns4:TrackAndTrace>
</ns4:Request>
<ns4:Request>
<ns4:TrackAndTrace>
<ns4:CPAId>003</ns4:CPAId>
<ns4:CorrelationId>cyuri7</ns4:CorrelationId>
</ns4:TrackAndTrace>
</ns4:Request>
</ns4:Requests>
我想格式化
<?xml version="1.0" encoding="UTF-8"?>
<ns4:Requests xmlns:ns2="http://www.dummy.com/xsd/tublu/murmur_001" xmlns:ns4="http://www.dummy.com/xsd/naku_001" xmlns:ns3="http://www.dummy.com/xsd/CommonObjects_001">
<ns4:RequestSetId>fhskgvseruigiu</ns4:RequestSetId>
<ns4:RequestStream>CHAPP</ns4:RequestStream>
<ns4:Request xmlns:ns4="http://www.dummy.com/xsd/naku_001"><ns4:TrackAndTrace><ns4:CPAId>003</ns4:CPAId><ns4:CorrelationId>ytuty</ns4:CorrelationId></ns4:TrackAndTrace></ns4:Request>
<ns4:Request xmlns:ns4="http://www.dummy.com/xsd/naku_001"><ns4:TrackAndTrace><ns4:CPAId>003</ns4:CPAId><ns4:CorrelationId>cyuri7</ns4:CorrelationId></ns4:TrackAndTrace></ns4:Request>
</ns4:Requests>
這是解決方案(通過使用 Java 的 XSLT API 轉換 XML 數據),
As you may also have noticed.. JAXB alone cannot meet this requirement, but after marshalling the object to a formatted XML String (as u have shown) you can then post process/transform it accordingly using a suitable XSLT file
因此,要獲得線性化的“請求”元素,只需使用如下所示的 xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="TrackAndTrace"/>
<xsl:strip-space elements="Request"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
注意:還測試了上述方法/方法是否正常工作 - 使用了 Stylizer 示例代碼(來自https://docs.oracle.com/javase/tutorial/jaxp/xslt/transformingXML.ZFC35EZ8888 )
干杯!
更新:如果您想要一個還保留原始名稱空間前綴的解決方案,如您的問題所示,請遵循此變體 Add factory.setNamespaceAware(true); 在 Stylizer 代碼中 & 使用這個經過調整的 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="w3.org/1999/XSL/Transform" xmlns:ns4="dummy.com/xsd/naku_001">
<xsl:strip-space elements="ns4:TrackAndTrace"/>
<xsl:strip-space elements="ns4:Request"/>
<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.