如何使用xslt在xml元素中编写xml

时间:2018-01-19 01:32:10

标签: xml xslt

是否可以使用XSLT在xml元素中编写xml。

由于我已经在一个元素中,我无法使用匹配模板功能。我试图使用xsl副本,但它会导致以下错误

“元素”类型的项目无法在“属性”类型的节点中构建

转换前的XML格式

<Results>
<Locations>
  <Location>
    <xyz>asa</xyz>
     <extended>
        <abc>blah</abc>
     </extended>
     <another>
        <abc>blah</abc>
     </another>
   </Location>
     <Location>
    <xyz>asa</xyz>
     <extended>
        <abc>blah</abc>
     </extended>
     <another>
        <abc>blah</abc>
     </another>
   </Location>
</Locations>
</Results>

**转换后所需的XML格式**

 <TransactionResponse ResponseType="Location_Query_Response1">

 <ParsedData Name="MessageData" Value="&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;*******************************Location*******"/>

  <Location>
    <xyz>asa</xyz>
     <extended>
        <abc>blah</abc>
     </extended>
     <another>
        <abc>blah</abc>
     </another>
   </Location>
     <Location>
    <xyz>asa</xyz>
     <extended>
        <abc>blah</abc>
     </extended>
     <another>
        <abc>blah</abc>
     </another>
     </Location>

  </TransactionResponse>

XSLT

<xsl:template match="/">
   <xsl:element name="TransactionResponse">
         <xsl:element name="Data">
              <xsl:element name="ParsedData">
                    this piece works
               </xsl:element>

           <xsl:for-each select="Locations/Location/*>
                <xsl:copy-of select="Location"/>

           </xsl:for-each>

          </xsl:element>
   </xsl:element>

1 个答案:

答案 0 :(得分:0)

只需添加另一个模板即可重写位置,避免在所有子节点上使用<xsl:for-each>。此外,您无需使用<xsl:element>,因为您可以直接使用节点。

<xsl:template match="/">
   <TransactionResponse>
          <Data>
               <ParsedData>
                    this piece works
               </ParsedData>

               <xsl:apply-templates select="Locations"/>

          </Data>
   </TransactionResponse>
</xsl:template>

<xsl:template match="Locations">
   <xsl:copy-of select="*"/>
</xsl:template>