2012-08-12 3 views
0

ХМL :그룹 폭

<select> 
<option value="http://germany.gr">Germany</option> 
<option value="france">France</option> 
</select> 

즉, 경우 :

<?xml version="1.0" encoding="utf-8" ?> 
<page> 
<elements> 
<element> 
<data> 
<Styles Name="default"> 
<Style Url="/css.css" Browser="default" Version="default"/> 
</Styles> 
</data> 
</element> 
<element type="Digillect.WB.Web.Elements.Site.SiteStructureElement"> 
<config StartLevel="0" MaxDepth="3" UseItemVisibility="false"> 
<monikers> 
<moniker store="asdasd"/> 
</monikers> 
</config> 
<data ParentPath="/"> 
</data> 
</element> 


<element name="bids"> 
<config> 
<Object Id="1b61995a-6e22-4b09-af5f-9a50cdaa7863"/> 
<Object Id="baa1d3df-0510-4f68-8a41-1b9b22587134"/> 
</config> 
<data> 

<Object Id="id2" Name="Paris"> 
<Property Name="COUNTRY">France</Property> 
<Property Name="WWW" >http://france.fr</Property> 
</Object> 
<Object Id="id1" Name="Lion"> 
<Property Name="COUNTRY">France</Property> 
<Property Name="WWW" >http://france.fr</Property> 
</Object> 
<Object Id="id3" Name="Berlin"> 
<Property Name="COUNTRY">Germany</Property> 
<Property Name="WWW" >http://germany.gr</Property> 
</Object> 

</data> 
</element> 
</elements> 
</page> 

국가의 선택기 이름으로 분류하고 중복 제거 가져올 필요가있다 국가가 몇 번 만났을 때 값으로 = id를 지정하십시오. 다음 번 경우

설명 그룹화 링크를 지정 : 국가가 여러 번

을 충족하는 경우

코드 :

<div id="france"> 
<p> <a href="/index.php?id=id1">Lion</a></p> 
<p><a href="/index.php?id=id2">Paris</a></p> 
</div> 

국가가 한 번에 충족하는 경우 - XSLT로

+0

질문을 편집하고 원하는 결과를 추가하십시오. –

답변

0

를 작성하지 않은 1.0을 사용하면 Muechian 그룹을 사용하여 그룹화를 수행하여 중복을 식별하고 제거 할 수 있습니다. 스타일 시트

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

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

<xsl:key name="k1" match="data/Object" use="@Id"/> 

<xsl:template match="data"> 
    <select> 
    <xsl:apply-templates select="Object[generate-id() = generate-id(key('k1', @Id)[1])]"/> 
    </select> 
    <xsl:apply-templates select="Object[generate-id() = generate-id(key('k1', @Id)[1]) and key('k1', @Id)[2]]" mode="desc"/> 
</xsl:template> 

<xsl:template match="data/Object[key('k1', @Id)[2]]"> 
    <option value="{@Id}"> 
    <xsl:value-of select="Property[@Name = 'COUNTRY']"/> 
    </option> 
</xsl:template> 

<xsl:template match="data/Object[not(key('k1', @Id)[2])]"> 
    <option value="{Property[@Name = 'WWW']}"> 
    <xsl:value-of select="Property[@Name = 'COUNTRY']"/> 
    </option> 
</xsl:template> 

<xsl:template match="data/Object" mode="desc"> 
    <div id="city_{@Id}"> 
    <xsl:apply-templates select="key('k1', @Id)/Property[@Name = 'NAME']" mode="desc"/> 
    </div> 
</xsl:template> 

<xsl:template match="data/Object/Property" mode="desc"> 
    <p> 
    <xsl:value-of select="."/> 
    </p> 
</xsl:template> 

</xsl:stylesheet> 

상기 입력

<page> 
<elements> 
<element name="bids"> 
<data> 

<Object Id="id1"> 
<Property Name="NAME" Order="0">Paris</Property> 
<Property Name="COUNTRY">France</Property> 
<Property Name="WWW" >http://france.fr</Property> 
</Object> 
<Object Id="id1"> 
<Property Name="NAME" Order="0">Lion</Property> 
<Property Name="COUNTRY">France</Property> 
<Property Name="WWW" >http://france.fr</Property> 
</Object> 
<Object Id="id2"> 
<Property Name="NAME" Order="0">Berlin</Property> 
<Property Name="COUNTRY">Germany</Property> 
<Property Name="WWW" >http://germany.gr</Property> 
</Object> 

</data> 
</element> 
</elements> 
</page> 

변환

<select> 
    <option value="id1">France</option> 
    <option value="http://germany.gr">Germany</option></select><div id="city_id1"> 
    <p>Paris</p> 
    <p>Lion</p> 
</div> 

[편집]

여기

변경된 구현하려고 다른 키를 사용하는 적응 스타일이며 요구 사항 :

I 입력에 해당 스타일 시트를 적용하면3210
<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:strip-space elements="*"/> 
<xsl:output method="html" indent="yes"/> 

<xsl:key name="k1" match="data/Object" use="Property[@Name = 'COUNTRY']"/> 

<xsl:template match="data[Object]"> 
    <select> 
    <xsl:apply-templates select="Object[generate-id() = generate-id(key('k1', Property[@Name = 'COUNTRY'])[1])]"/> 
    </select> 
    <xsl:apply-templates select="Object[generate-id() = generate-id(key('k1', Property[@Name = 'COUNTRY'])[1]) and key('k1', Property[@Name = 'COUNTRY'])[2]]" mode="desc"/> 
</xsl:template> 

<xsl:template match="data/Object[key('k1', Property[@Name = 'COUNTRY'])[2]]"> 
    <option value="{Property[@Name = 'COUNTRY']}"> 
    <xsl:value-of select="Property[@Name = 'COUNTRY']"/> 
    </option> 
</xsl:template> 

<xsl:template match="data/Object[not(key('k1', Property[@Name = 'COUNTRY'])[2])]"> 
    <option value="{Property[@Name = 'WWW']}"> 
    <xsl:value-of select="Property[@Name = 'COUNTRY']"/> 
    </option> 
</xsl:template> 

<xsl:template match="data/Object" mode="desc"> 
    <div id="{Property[@Name = 'COUNTRY']}"> 
    <xsl:apply-templates select="key('k1', Property[@Name = 'COUNTRY'])" mode="link"> 
     <xsl:sort select="@Name"/> 
    </xsl:apply-templates> 
    </div> 
</xsl:template> 

<xsl:template match="data/Object" mode="link"> 
    <p> 
    <a href="/index.php?id={@Id}"> 
     <xsl:value-of select="@Name"/> 
    </a> 
    </p> 
</xsl:template> 

</xsl:stylesheet> 

<?xml version="1.0" encoding="utf-8" ?> 
<page> 
<elements> 
<element> 
<data> 
<Styles Name="default"> 
<Style Url="/css.css" Browser="default" Version="default"/> 
</Styles> 
</data> 
</element> 
<element type="Digillect.WB.Web.Elements.Site.SiteStructureElement"> 
<config StartLevel="0" MaxDepth="3" UseItemVisibility="false"> 
<monikers> 
<moniker store="asdasd"/> 
</monikers> 
</config> 
<data ParentPath="/"> 
</data> 
</element> 


<element name="bids"> 
<config> 
<Object Id="1b61995a-6e22-4b09-af5f-9a50cdaa7863"/> 
<Object Id="baa1d3df-0510-4f68-8a41-1b9b22587134"/> 
</config> 
<data> 

<Object Id="id2" Name="Paris"> 
<Property Name="COUNTRY">France</Property> 
<Property Name="WWW" >http://france.fr</Property> 
</Object> 
<Object Id="id1" Name="Lion"> 
<Property Name="COUNTRY">France</Property> 
<Property Name="WWW" >http://france.fr</Property> 
</Object> 
<Object Id="id3" Name="Berlin"> 
<Property Name="COUNTRY">Germany</Property> 
<Property Name="WWW" >http://germany.gr</Property> 
</Object> 

</data> 
</element> 
</elements> 
</page> 

결과이므로 option 요소로 그룹화

<select> 
    <option value="France">France</option> 
    <option value="http://germany.gr">Germany</option></select><div id="France"> 
    <p><a href="/index.php?id=id1">Lion</a></p> 
    <p><a href="/index.php?id=id2">Paris</a></p> 
</div> 

이고 I는 정렬을 결정 알아낼 수 없었지만 (필수 주문) p 요소에는 @Id 값이 포함 된 링크가 포함되어 있습니다.

+0

흠. 더 복잡한 xml 경우 - 문제. 나는 고칠 수있는 지식이 충분하지 않습니다. 나는 정식 버전을 넣었다. – user1593412

+0

입력 샘플을 편집 할 수 있지만 다른 요소와 정확히 무엇을하고 싶은지 알 필요가 있으므로 결과 샘플을 편집하여 원하는 결과를 설명하십시오. –

+0

xml 및 html을 수정했습니다. 모든 곳의 ID가 다르며 그룹이 해당 국가에있을 것입니다. – user1593412

0

이 변환 :

<page> 
    <elements> 
     <element name="bids"> 
      <data> 
       <Object Id="id1"> 
        <Property Name="NAME" Order="0">Paris</Property> 
        <Property Name="COUNTRY">France</Property> 
        <Property Name="WWW" >http://france.fr</Property> 
       </Object> 
       <Object Id="id1"> 
        <Property Name="NAME" Order="0">Lion</Property> 
        <Property Name="COUNTRY">France</Property> 
        <Property Name="WWW" >http://france.fr</Property> 
       </Object> 
       <Object Id="id2"> 
        <Property Name="NAME" Order="0">Berlin</Property> 
        <Property Name="COUNTRY">Germany</Property> 
        <Property Name="WWW" >http://germany.gr</Property> 
       </Object> 
      </data> 
     </element> 
    </elements> 
</page> 

가 원하는, 올바른 결과 생산 - 국가가/도시가 정렬되는을 : 제공된 XML 문서에 적용

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

<xsl:key name="kObjByCountry" match="Object" use="Property[@Name='COUNTRY']"/> 

<xsl:template match="/"> 
    <xsl:variable name="vCountries" select= 
    "/*/*/*/data/Object 
      [generate-id() 
      = generate-id(key('kObjByCountry', Property[@Name='COUNTRY'])[1]) 
      ]"/> 
    <select> 
    <xsl:apply-templates select="$vCountries"> 
     <xsl:sort select="Property[@Name='COUNTRY']"/> 
    </xsl:apply-templates> 
    </select> 

    <xsl:apply-templates select="$vCountries" mode="desc"> 
     <xsl:sort select="Property[@Name='COUNTRY']"/> 
    </xsl:apply-templates> 
</xsl:template> 

<xsl:template match="Object"> 
    <xsl:variable name="v2nd" 
     select="key('kObjByCountry', Property[@Name='COUNTRY'])[2]"/> 
    <option value="{(@Id[$v2nd]|Property[@Name='WWW'])[1]}"> 
    <xsl:value-of select="Property[@Name='COUNTRY']"/> 
    </option> 
</xsl:template> 

<xsl:template mode="desc" 
    match="Object[key('kObjByCountry', Property[@Name='COUNTRY'])[2]]"> 
    <div id="sity_{@Id}"> 
    <xsl:apply-templates select= 
     "key('kObjByCountry', Property[@Name='COUNTRY']) 
            /Property[@Name='NAME']"> 
     <xsl:sort/> 
     </xsl:apply-templates> 
    </div> 
</xsl:template> 

<xsl:template match="Property[@Name='NAME']"> 
    <p><xsl:value-of select="."/></p> 
</xsl:template> 

    <xsl:template mode="desc" 
    match="Object[not(key('kObjByCountry', Property[@Name='COUNTRY'])[2])]"/> 
</xsl:stylesheet> 

:

<select> 
    <option value="id1">France</option> 
    <option value="http://germany.gr">Germany</option> 
</select> 
<div id="sity_id1"> 
    <p>Lion</p> 
    <p>Paris</p> 
</div> 

설명 다음 Muenchian grouping methodAVT의의

적절한 사용.

xsl:sort의 올바른 사용.