3

my xml: 変換される入力 xml

                 <content>    
                     <conditionalText name="Masked_Account_Number">
                          <text>
                             Hi 2<dynamicVariable name="asked_Account"/> is needed.
                         </text>
                     </conditionalText>

                     <dynamicInclude name="xyz" />
                </content>

したがって、上記のxmlを使用し、「名前」を属性として含むすべてのタグを識別し、その値を抽出してタグ「名前」を作成し、その下に「a」タグが必要です。形式は次のとおりです。

入力 xml の属性として「名前」を含むすべてのタグの変換された出力は、次のようになります。

                             <name>
                                <a href="#" id="dynamicvariable" 
                                   name="value of name attribute"                   
                                   xmlns="http://www.w3.org/1999/xhtml">[value of name attribute]
                                </a>
                          </name>

入力xmlファイルの「dynamicVariable」タグに対してのみ、「a」タグを次のように作成する必要があります

入力 xml の「dynamicVariable」タグの変換された出力は、次のようになります。

                      <a href="#" id="dynamicvariable" 
                                name="value of name attribute"                   
                            xmlns="http://www.w3.org/1999/xhtml">[value of name attribute]
                      </a>

変換後の私の出力xmlは次のようになります

           <content1>
                     <conditionalText>
                         <text>
                           Hi 2
                           <a href="#" id="dynamicvariable" 
                               name="asked_Account"                   
                               xmlns="http://www.w3.org/1999/xhtml">[asked_Account]
                           </a>is needed
                        </text>

                         <name>
                           <a href="#" id="dynamicvariable"                                 
                             name="Masked_Account_Number"                   
                             xmlns="http://www.w3.org/1999/xhtml">[Masked_Account_Number]
                           </a>
                        </name>
                  </conditionalText>

                  <dynamicInclude>
                      <name>
                         <a href="#" id="dynamicvariable" name="xyz"                   
                            xmlns="http://www.w3.org/1999/xhtml">[xyz]
                         </a>
                     </name>
                  </dynamicIncude>
          </content1>

試した XSLT を以下に示します: 2 つのテンプレートを使用しました。最初のテンプレートは、属性として「名前」を含むすべてのタグを識別し、その値を抽出して、次の形式で作成します。

                                 <name>
                                  <a href="#" id="dynamicvariable" 
                                    name="value of name attribute"                   
                                   xmlns="http://www.w3.org/1999/xhtml">[value of name attribute]
                                  </a>
                                </name>

そして、2 番目のテンプレートは最初のテンプレートをオーバーライドし、'dynamicVariable' という名前のタグのみを識別し、その 'name' 属性値を抽出して、次の形式のタグを作成します。

                            <a 
                              href="#" id="dynamicvariable" 
                              name="value of name attribute"                   
                             xmlns="http://www.w3.org/1999/xhtml">[value of name attribute]
                            </a>

したがって、私の最終的な xslt は次のとおりです。

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

               <xsl:template match="content/*">
                    <content1>
                      <xsl:apply-templates />
                    </content1>
              </xsl:template>

           <xsl:template  match= "*/@name" >
                   <name>
                      <a href ='#'  id="dynamicvariable" xmlns="http://www.w3.org/1999/xhtml" >
                          <xsl:copy-of select="@*"/>
                              [<xsl:value-of select="@name"/>]
                      </a>
                  </name>

                 <xsl:for-each select="child::*">
                    <xsl:if test="name()='text'">
                          <text>
                            <xsl:apply-templates />
                           </text>
                     </xsl:if>
                  </xsl:for-each>
      </xsl:template>

                <xsl:template  match= "*[name()='dynamicVariable']" >
                  <a href ='#'  id="dynamicvariable" xmlns="http://www.w3.org/1999/xhtml" >
                     <xsl:copy-of select="@*"/>
                       [<xsl:value-of select="@name"/>]
                  </a>
                </xsl:template>

        </xsl:stylesheet>

しかし、必要な変換された xml を取得できませんでした。誰でも私を助けることができます。そして、条件付きテキスト要素を持つ変換された xml ファイルは、変換された xml で指定されたのと同じ順序でサブチャイルドとして持つ必要があります。

4

1 に答える 1

1

この変換

<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()|@*[not(name()='name')]"/>
       <xsl:apply-templates select="@name"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="*/@name">
   <name>
     <a href="#" id="dynamicvariable"
        name="{.}"
        xmlns="http://www.w3.org/1999/xhtml">[<xsl:value-of select="."/>]
     </a>
   </name>
 </xsl:template>

 <xsl:template match="dynamicVariable">
   <a href="#" id="dynamicvariable"
      name="{@name}"
      xmlns="http://www.w3.org/1999/xhtml">[<xsl:value-of select="@name"/>]
   </a>
 </xsl:template>
</xsl:stylesheet>

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

<content>
  <conditionalText name="Masked_Account_Number">
    <text>
      Hi 2<dynamicVariable name="asked_Account"/> is needed.
    </text>
  </conditionalText>

  <dynamicInclude name="xyz" />
</content>

必要なものを生成します(の名前の変更はcontent読者の練習問題として残されます)、正しい結果

<content>
   <conditionalText>
      <text>
      Hi 2<a xmlns="http://www.w3.org/1999/xhtml" href="#" id="dynamicvariable" name="asked_Account">[asked_Account]
   </a> is needed.
    </text>
      <name>
         <a xmlns="http://www.w3.org/1999/xhtml" href="#" id="dynamicvariable" name="Masked_Account_Number">[Masked_Account_Number]
     </a>
      </name>
   </conditionalText>
   <dynamicInclude>
      <name>
         <a xmlns="http://www.w3.org/1999/xhtml" href="#" id="dynamicvariable" name="xyz">[xyz]
     </a>
      </name>
   </dynamicInclude>
</content>
于 2012-05-31T12:11:22.197 に答える