2017-10-03 10 views
1

別のXML要素にxml要素からのパス属性:私は必要なものXSLT:私はソースXMLを持っているかのparam

ここ
<?xml version="1.0" encoding="UTF-8"?> 
<message field1="11" field2="22"> 
    <sub1 sub_field1="sub11" sub_field2="sub22" sub2_id="12243"/> 
    <sub1 sub_field1="sub11" sub_field2="sub12" sub2_id="12244"/>  
    <sub2 sub2_field="sub21" sub2_field2="sub22" id="12243"/> 
    <sub2 sub2_field="sub23" sub2_field2="sub24" id="12243"/> 
    <sub2 sub2_field="sub25" sub2_field2="sub26" id="12244"/> 
    <sub2 sub2_field="sub27" sub2_field2="sub28" id="12244"/> 
</message> 

構造、:

<message> 
    <sub1> 
     <sub_field1>value</sub_field1> 
     <sub_field2>value</sub_field2> 
     <sub2_list> 
     <sub2> 
      <sub2_field>value</sub2_field> 
      <sub2_field2>value</sub2_field2> 
     </sub2> 
     <sub2> 
      <sub2_field>value</sub2_field> 
      <sub2_field2>value</sub2_field2> 
     </sub2> 
     </sub2_list> 
    </sub1> 
    <sub1> 
     <sub_field1>value</sub_field1> 
     <sub_field2>value</sub_field2> 
     <sub2_list> 
     <sub2> 
      <sub2_field>value</sub2_field> 
      <sub2_field2>value</sub2_field2> 
     </sub2> 
     <sub2> 
      <sub2_field>value</sub2_field> 
      <sub2_field2>value</sub2_field2> 
     </sub2> 
     </sub2_list> 
    </sub1> 
</message> 

そして私だが理解しません、 sub2_idをsub1タグからid2タグに渡す方法、sub2_idをどのように使うかparam?.............................. .............

私のxslは次のようになります。

​​

sometextsometextsometextsometextsometextsometextsometextsometextsometext

答えて

0

あなたはsub2_id=が有効な変数名もしか

<xsl:variable name="sub2_id=" select="@sub2_id"/> 

あなたがこれを行うためのものではない例えば、あなたのコード内のいくつかの構文エラーを持っている...

<xsl:variable name="sub2_id" select="@sub2_id"/> 

多分あなたはいくつかのコードを逃しているかもしれませんが、あなたがそのvaria実際にsub1要素にあるときはmessage要素に配置されているため、sub1を選択するコードにxsl:for-eachまたはxsl:apply-templatesがあると予想されます。

<xsl:for-each select="../sub2[@id=$sub2_id]"> 

しかし、それはに有益であるかもしれない...ので、あなたがこれを行うと、それを選択し、その場合にはsub2sub1の兄弟である、あなたは、sub1要素の上に配置したと仮定すると、ここでxsl:keyを使用してsub2要素を参照してください。

は、Iが大きくコードを簡素化する要素に属性を変換するための一般的なテンプレートを追加した

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="xml" indent="yes" /> 

<xsl:key name="sub2" match="sub2" use="@id" /> 

<xsl:template match="message"> 
    <xsl:copy> 
     <xsl:apply-templates select="sub1" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="sub1"> 
    <sub1> 
     <xsl:apply-templates select="@sub_field1|@sub_field2"/> 
     <sub2list> 
      <xsl:for-each select="key('sub2', @sub2_id)"> 
       <sub2> 
        <xsl:apply-templates select="@sub2_field|@sub2_field2"/> 
       </sub2> 
      </xsl:for-each> 
     </sub2list> 
    </sub1> 
</xsl:template> 

<xsl:template match="@*"> 
    <xsl:element name="{name()}"> 
     <xsl:value-of select="."/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

注このXSLTを試します。

+0

ありがとうございます。これは参考になりました。 – ExcepOra

関連する問題