0

我正在尝试使用一个样式表来转换一些 XML,该样式表看起来像:

     <m10:RESPONSE_DETAIL> 
        <m10:LINE_NO>001</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     </m10:RESPONSE_DETAIL> 
     <m10:RESPONSE_DETAIL> 
        <m10:LINE_NO>002</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     </m10:RESPONSE_DETAIL> 
     <m10:RESPONSE_DETAIL> 
        <m10:LINE_NO>003</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>00000100</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>00000000</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     </m10:RESPONSE_DETAIL> 

进入这个:

     <m10:RESPONSE_DETAIL> 
        <m10:LINE_NO>001</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>109</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>9</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
        <m10:LINE_NO>002</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>109</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>9</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
        <m10:LINE_NO>003</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>100</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>0</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     </m10:RESPONSE_DETAIL>

我在 xslt 方面不太强,所以这可能是基本的,但到目前为止我所尝试的一切都回来了:

     <m10:RESPONSE_DETAIL> 
        <m10:LINE_NO>001</m10:LINE_NO> 
        <m10:LINE_NO>002</m10:LINE_NO> 
        <m10:LINE_NO>003</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>109</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_AMT>109</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_AMT>100</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>9</m10:APPR_ITEM_TAX> 
        <m10:APPR_ITEM_TAX>9</m10:APPR_ITEM_TAX> 
        <m10:APPR_ITEM_TAX>0</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     </m10:RESPONSE_DETAIL> 

任何建议将不胜感激...

先感谢您

4

2 回答 2

0

这个 XSLT 1.0 样式表...

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

<xsl:template match="@*|node()">
  <xsl:copy>
   <xsl:apply-templates select="@*|node()" /> 
  </xsl:copy>
</xsl:template>  

<xsl:template match="m10:RESPONSE_DETAIL[1]">
  <xsl:copy>
   <xsl:apply-templates select="@*" /> 
   <xsl:apply-templates select="../m10:RESPONSE_DETAIL/*" /> 
  </xsl:copy>    
</xsl:template>

<xsl:template match="m10:RESPONSE_DETAIL" />

</xsl:stylesheet>

... 将转换此输入文档

<root xmlns:m10="m10" > 
<m10:RESPONSE_DETAIL> 
        <m10:LINE_NO>001</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     </m10:RESPONSE_DETAIL> 
     <m10:RESPONSE_DETAIL> 
        <m10:LINE_NO>002</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
     </m10:RESPONSE_DETAIL> 
     <m10:RESPONSE_DETAIL> 
        <m10:LINE_NO>003</m10:LINE_NO> 
        <m10:APPR_ITEM_AMT>00000100</m10:APPR_ITEM_AMT> 
        <m10:APPR_ITEM_TAX>00000000</m10:APPR_ITEM_TAX> 
        <m10:TAX_FLAG>N</m10:TAX_FLAG> 
</m10:RESPONSE_DETAIL>
</root>

按要求。

于 2012-06-20T16:34:16.027 回答
0

您发布的示例不是有效的 Xml 文档-您要转换的示例具有多个根元素,并且都没有显示 m10 前缀绑定到的名称空间。

您可以使用身份转换来实现您想要的。我修复了您的输入文档,以便可以编写 xslt。我的输入文档如下所示:

<root xmlns:m10="m10">
     <m10:RESPONSE_DETAIL>  
        <m10:LINE_NO>001</m10:LINE_NO>  
        <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT>  
        <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX>  
        <m10:TAX_FLAG>N</m10:TAX_FLAG>  
     </m10:RESPONSE_DETAIL>  
     <m10:RESPONSE_DETAIL>  
        <m10:LINE_NO>002</m10:LINE_NO>  
        <m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT>  
        <m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX>  
        <m10:TAX_FLAG>N</m10:TAX_FLAG>  
     </m10:RESPONSE_DETAIL>  
     <m10:RESPONSE_DETAIL>  
        <m10:LINE_NO>003</m10:LINE_NO>  
        <m10:APPR_ITEM_AMT>00000100</m10:APPR_ITEM_AMT>  
        <m10:APPR_ITEM_TAX>00000000</m10:APPR_ITEM_TAX>  
        <m10:TAX_FLAG>N</m10:TAX_FLAG>  
     </m10:RESPONSE_DETAIL>
</root>

我创建了以下样式表:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:m10="m10">
    <xsl:output method="xml" indent="yes"/>


    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

  <xsl:template match="root">
    <m10:RESPONSE_DETAIL>
      <xsl:apply-templates />
    </m10:RESPONSE_DETAIL>
  </xsl:template>

  <xsl:template match="m10:RESPONSE_DETAIL">
    <xsl:apply-templates select="*"/>
  </xsl:template>
</xsl:stylesheet>

它将您的输入文档转换为:

<?xml version="1.0" encoding="utf-8"?>
<m10:RESPONSE_DETAIL xmlns:m10="m10" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
     <m10:LINE_NO>001</m10:LINE_NO><m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT><m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX><m10:TAX_FLAG>N</m10:TAX_FLAG>  
     <m10:LINE_NO>002</m10:LINE_NO><m10:APPR_ITEM_AMT>00000109</m10:APPR_ITEM_AMT><m10:APPR_ITEM_TAX>00000009</m10:APPR_ITEM_TAX><m10:TAX_FLAG>N</m10:TAX_FLAG>  
     <m10:LINE_NO>003</m10:LINE_NO><m10:APPR_ITEM_AMT>00000100</m10:APPR_ITEM_AMT><m10:APPR_ITEM_TAX>00000000</m10:APPR_ITEM_TAX><m10:TAX_FLAG>N</m10:TAX_FLAG>
</m10:RESPONSE_DETAIL>
于 2012-06-20T16:12:47.733 回答