2

ここに私のXMLがあります:

<root>
<parameters>
<parameter>
    <key>sEmail</key>
    <value>cauchyjp@gmail.com</value>
    <type>string</type>
    <length>255</length>
</parameter>
<parameter>
    <key>sFirstName</key>
    <value>Bill</value>
    <type>string</type>
    <length>40</length>
</parameter>
</parameters>
<root>

キー sEmail の値を取得し、XML to XML xslt を使用してルート要素に属性として追加したいと考えています。

期待される結果は次のとおりです。

<root email="cauchyjp@gmail.com">
<parameters>
    <parameter>
        <key>sEmail</key>
        <value>cauchyjp@gmail.com</value>
        <type>string</type>
        <length>255</length>
    </parameter>
    <parameter>
        <key>sFirstName</key>
        <value>Bill</value>
        <type>string</type>
        <length>40</length>
    </parameter>
</parameters>
<root>

このリンクに似ていますが、属性ではなく要素の値があります。

誰かが私を助けることができますか?ありがとう

4

2 に答える 2

2

サブ要素の値が「sEmail」かどうかをテストできます。

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="parameters">
    <parameters>
      <xsl:attribute name="email">
        <xsl:value-of select="parameter[key='sEmail']/value"/>
      </xsl:attribute>
      <xsl:copy-of select="*"/>
    </parameters>
  </xsl:template>

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

</xsl:stylesheet> 
于 2012-05-22T10:09:36.857 に答える
2

AVTを使用してよりクリーンな方法で実行できます

<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="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="/*">
  <root email="{*/*[key = 'sEmail']/value}">
    <xsl:apply-templates/>
  </root>
 </xsl:template>
</xsl:stylesheet>

この変換が提供された XML ドキュメントに適用されると、次のようになります。

<root>
    <parameters>
        <parameter>
            <key>sEmail</key>
            <value>cauchyjp@gmail.com</value>
            <type>string</type>
            <length>255</length>
        </parameter>
        <parameter>
            <key>sFirstName</key>
            <value>Bill</value>
            <type>string</type>
            <length>40</length>
        </parameter>
    </parameters>
</root>

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

<root email="cauchyjp@gmail.com">
   <parameters>
      <parameter>
         <key>sEmail</key>
         <value>cauchyjp@gmail.com</value>
         <type>string</type>
         <length>255</length>
      </parameter>
      <parameter>
         <key>sFirstName</key>
         <value>Bill</value>
         <type>string</type>
         <length>40</length>
      </parameter>
   </parameters>
</root>
于 2012-05-22T12:50:34.847 に答える