1

この形式の xml ドキュメントがあります。

<SampleXMLFormat>
<Header>
<Id>123</Id>
</header>
<Properties>
<property name= "type" value = "a1">
<property name="prop1" value="val1"/>
<property name="prop2" value="val2"/>
</Properties>
<Properties>
<property name= "type" value = "a2">
<property name="prop1" value="val1"/>
<property name="prop2" value="val2"/>
</Properties>
</SampleXMLFormat>

私のxml文書を次のようなものに変換するxslt変換を書くことができません

<SampleXMLFormat>
<Header>
<Id>123</Id>
</Header>
<Properties>
<property name="a1_prop1" value="val1"/>
<property name="a1_prop2" value="val2"/>
<property name="a2_prop1" value="val1"/>
<property name="a2_prop2" value="val2"/>
</Properties>
</SampleXMLFormat>

助けてもらえますか??

4

2 に答える 2

2

この変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  <SampleXMLFormat>
    <xsl:copy-of select="Header"/>
    <Properties>
     <xsl:apply-templates/>
    </Properties>
  </SampleXMLFormat>
 </xsl:template>

 <xsl:template match="property[not(@name='type')]">
  <property name="{../property[@name='type']/@value}_{@name}" value="{@value}"/>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<SampleXMLFormat>
  <Header>
    <Id>123</Id>
  </Header>
  <Properties>
    <property name= "type" value = "a1"/>
    <property name="prop1" value="val1"/>
    <property name="prop2" value="val2"/>
  </Properties>
  <Properties>
    <property name= "type" value = "a2"/>
    <property name="prop1" value="val1"/>
    <property name="prop2" value="val2"/>
  </Properties>
</SampleXMLFormat>

必要な正しい結果が生成されます。

<SampleXMLFormat>
   <Header>
      <Id>123</Id>
   </Header>
   <Properties>
      <property name="a1_prop1" value="val1"/>
      <property name="a1_prop2" value="val2"/>
      <property name="a2_prop1" value="val1"/>
      <property name="a2_prop2" value="val2"/>
   </Properties>
</SampleXMLFormat>

説明:

以下の適切な使用:

  1. テンプレート マッチ パターン.

  2. AVT (属性値テンプレート)。

于 2013-04-25T02:25:48.173 に答える