Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xslt元素的组宽度(xslt 1.0)_Xslt_Xslt 1.0 - Fatal编程技术网

xslt元素的组宽度(xslt 1.0)

xslt元素的组宽度(xslt 1.0),xslt,xslt-1.0,Xslt,Xslt 1.0,БМL: 法国 http://france.fr 法国 http://france.fr 德国 http://germany.gr 有必要将国家的选择器按名称排序,并消除重复项: <?xml version="1.0" encoding="utf-8" ?> <page> <elements> <element> <data> <Styles Name="default"> <Style Url="/css.cs

БМL:


法国
http://france.fr
法国
http://france.fr
德国
http://germany.gr
有必要将国家的选择器按名称排序,并消除重复项:

<?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>

德国
法国
也就是说,如果国家/地区多次会面,in value=指定id。如果会面一次,则指定链接

描述分组如下:如果一个国家多次开会

代码:



如果国家/地区会议一次-未使用XSLT 1.0编写

,则可以使用Muechian分组分别执行分组,以识别和消除重复项;样式表

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


转换输入

<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>

巴黎
法国
http://france.fr
狮子
法国
http://france.fr
柏林
德国
http://germany.gr
进入


法国
德国
巴黎

狮子

[编辑]

下面是一个经过调整的样式表,它使用不同的键来尝试实现更改后的需求:

<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>


当我将样式表应用于输入时

<?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>

法国
http://france.fr
法国
http://france.fr
德国
http://germany.gr
结果是

<?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>

法国
德国


因此,
选项
元素根据需要进行分组(尽管我无法确定排序顺序的决定因素),而
p
元素包含包含包含
@Id
值的链接。

此转换

<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>
<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>
<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文档时

<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>
<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>
<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>

巴黎
法国
http://france.fr
狮子
法国
http://france.fr
柏林
德国
http://germany.gr
生成所需的、正确的结果——在该结果中对国家/城市进行排序

<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>
<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>
<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="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>
<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>
<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>
正确使用s


正确使用

请编辑问题并添加完整的想要的结果。Hmmm。如果xml更复杂,那就麻烦了。我没有足够的知识来解决这个问题。我放了完整的版本。你可以编辑输入样本,但我们还需要知道你想对其他元素做什么,所以编辑结果样本,并解释你想要什么结果。我更正了xml和html。每个地方的Id都是不同的,小组将在国家上有我将编辑我的帖子,尝试调整建议的解决方案,以适应您改变的需求。太好了!我想要什么,但我不理解如何编写[generate-id()=generate-id(key('k1',Property[@Name='REGION'])[1])和key('k1',Property[@Name='REGION'])[2]]