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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/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
XML XSLT在同一组中显示相关信息_Xml_Xslt - Fatal编程技术网

XML XSLT在同一组中显示相关信息

XML XSLT在同一组中显示相关信息,xml,xslt,Xml,Xslt,我有一个需要用XSLT转换的XML文件。这是我的XML示例: <level1>COLORS</level1> <level2>COLOR</level2> <level3>RED</level3> <level1>COLORS</level1> <level2>COLOR</level2> <level3>YELLOW</level3>

我有一个需要用XSLT转换的XML文件。这是我的XML示例:

<level1>COLORS</level1>
  <level2>COLOR</level2>
  <level3>RED</level3>
<level1>COLORS</level1>
  <level2>COLOR</level2>
  <level3>YELLOW</level3>
<level1>FLAVORS</level1>
  <level2>FLAVOR</level2>
  <level3>SWEET</level3>
<level1>FLAVORS</level1>
  <level2>FLAVOR</level2>
  <level3>SOUR</level3>
我需要在Sharepoint 2007中执行此操作。我一直在研究如何使用前兄弟姐妹、后兄弟姐妹、每个组等来实现这一点,但由于缺乏对这些技术的了解,或者因为Sharepoint不允许这样做(SP只知道XSL v.1而不知道v.2)。 我将感谢任何提供的帮助。谢谢

使用:

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

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

    <xsl:key name="k" match="level1" use="."/>


    <xsl:template match="/root">
        <xsl:apply-templates select="level1[generate-id(.) = generate-id(key('k', .))]"/>
    </xsl:template>

    <xsl:template match="level1">
        <xsl:value-of select="."/>
        <xsl:text>&#xA0;</xsl:text>
        <xsl:value-of select="following-sibling::level2[1]"/>
        <xsl:text>&#xA0;</xsl:text>
        <xsl:apply-templates select="key('k', .)/following-sibling::level3[1]"/>
        <xsl:text>&#xA;</xsl:text>
    </xsl:template>

    <xsl:template match="level3">
        <xsl:value-of select="."/>
        <xsl:text>&#xA0;</xsl:text>
    </xsl:template>

</xsl:stylesheet>

以下面的格式使用您的示例

 <?xml version="1.0" encoding="utf-8"?>
    <root>
    <level1>COLORS</level1>
    <level2>COLOR</level2>
    <level3>RED</level3>
    <level1>COLORS</level1>
    <level2>COLOR</level2>
    <level3>YELLOW</level3>
    <level1>FLAVORS</level1>
    <level2>FLAVOR</level2>
    <level3>SWEET</level3>
    <level1>FLAVORS</level1>
    <level2>FLAVOR</level2>
    <level3>SOUR</level3>
    </root>

颜色
颜色
红色
颜色
颜色
黄色的
口味
风味
甜蜜的
口味
风味
酸的
用这个

  <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
    >
        <xsl:output method="xml" indent="yes"/>
        <xsl:key name="k1" match="level1" use="."/>
        <xsl:key name="k2" match="level2" use="."/>
        <xsl:key name="k3" match="level3" use="."/>


        <xsl:template match="root">
                <xsl:apply-templates select="level1[generate-id() = generate-id(key('k1', .)[1])]"/>
        </xsl:template>
        <xsl:template match="level1">
            <xsl:value-of select="."/>
            <xsl:text> </xsl:text>
            <xsl:apply-templates select="../level2[generate-id() = generate-id(key('k2', .)[1])][preceding-sibling::level1[1]=current()]"/>
        </xsl:template>

        <xsl:template match="level2">
            <xsl:value-of select="."/>
            <xsl:text> </xsl:text>
            <xsl:apply-templates select="../level3[generate-id() = generate-id(key('k3', .)[1])][preceding-sibling::level2[1]=current()]"/>
        </xsl:template>
        <xsl:template match="level3">
            <xsl:value-of select="."/>
            <xsl:text> </xsl:text>
        </xsl:template>
    </xsl:stylesheet>

产生了正确的结果
颜色颜色红色黄色风味甜酸味这个简单的转换(只有一个键和一个模板):

<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="kValues" match="*/*" use="."/>

 <xsl:template match=
  "*/*[generate-id()
      =
      generate-id(key('kValues', .)[1])
      ]">
  <xsl:value-of select="concat(., ' ')"/>
 </xsl:template>

 <xsl:template match="text()"/>
</xsl:stylesheet>
<t>
    <level1>COLORS</level1>
    <level2>COLOR</level2>
    <level3>RED</level3>
    <level1>COLORS</level1>
    <level2>COLOR</level2>
    <level3>YELLOW</level3>
    <level1>FLAVORS</level1>
    <level2>FLAVOR</level2>
    <level3>SWEET</level3>
    <level1>FLAVORS</level1>
    <level2>FLAVOR</level2>
    <level3>SOUR</level3>
</t>
COLORS COLOR RED YELLOW FLAVORS FLAVOR SWEET SOUR

解释:正确使用

非常感谢您的及时回复。我要试试看!我真的很感激在这么短的时间内收到了两个选择。我两个都要试试!我将用它不仅解决我的问题,而且作为一个学习的机会。再次感谢!感谢您的评论,我的解决方案将适用于提供的任何数据量,另一个解决方案将只适用于您的xml明确如上所述的情况!如果你在红色下面加上蓝色,它就不会像我的一样在需要的地方捡起来!谢谢你,迪米特。尽管我不知道这些技术,但我同意您的解决方案看起来更简单这一事实。我试试看。但我必须说,另外两种解决方案非常有效,我很高兴现在我有三种不同的解决方案可以学习。谢谢。@user1167307:你是说我还是树猴子?:)无论如何,不客气。Dimitre的解决方案与我的解决方案的工作原理相同,但会为您节省一些键盘寿命;)仅供参考,lars指的是此处描述的muenchian分组方法!
<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="kValues" match="*/*" use="."/>

 <xsl:template match=
  "*/*[generate-id()
      =
      generate-id(key('kValues', .)[1])
      ]">
  <xsl:value-of select="concat(., ' ')"/>
 </xsl:template>

 <xsl:template match="text()"/>
</xsl:stylesheet>
<t>
    <level1>COLORS</level1>
    <level2>COLOR</level2>
    <level3>RED</level3>
    <level1>COLORS</level1>
    <level2>COLOR</level2>
    <level3>YELLOW</level3>
    <level1>FLAVORS</level1>
    <level2>FLAVOR</level2>
    <level3>SWEET</level3>
    <level1>FLAVORS</level1>
    <level2>FLAVOR</level2>
    <level3>SOUR</level3>
</t>
COLORS COLOR RED YELLOW FLAVORS FLAVOR SWEET SOUR