Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/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用于';n';重复元素创建';n';输出_Xslt - Fatal编程技术网

xslt用于';n';重复元素创建';n';输出

xslt用于';n';重复元素创建';n';输出,xslt,Xslt,请,你的任何想法,你可能认为作为一个解决方案会有所帮助。我被要求提出xslt样式表,它动态地为n个重复元素创建n个重复元素作为输入。例如,在父元素A下,有许多具有不同值的子元素,但我只需要提取元素1、元素2、…元素的值,并希望得到结果nResult 价值1 价值2 价值3 .... n元素数 名称 数字 地址 价值1 价值2 名称 数字 地址 在这里,您可以从更多的模板方法中获益。例如,要将输入元素更改为输出元素,可以使用以下模板: <xsl:template match="input"

请,你的任何想法,你可能认为作为一个解决方案会有所帮助。我被要求提出xslt样式表,它动态地为n个重复元素创建n个重复元素作为输入。例如,在父元素A下,有许多具有不同值的子元素,但我只需要提取元素1、元素2、…元素的值,并希望得到结果nResult


价值1
价值2
价值3
.... n元素数
名称
数字
地址
价值1
价值2
名称
数字
地址

在这里,您可以从更多的模板方法中获益。例如,要将
输入
元素更改为
输出
元素,可以使用以下模板:

<xsl:template match="input">
    <output>
        <xsl:apply-templates select="@*|node()"/>
    </output>
</xsl:template>
您可以使用类似的模板来删除非元素

<xsl:template match="input/*/*[not(starts-with(name(), 'Element'))]" />
注意,通过使用模板优先级,您可以稍微简化这一点,并删除对元素名称的重复检查。尝试用这些模板替换最后两个模板

<xsl:template match="input/*/*[starts-with(name(), 'Element')]" priority="2">
    <Result>
        <xsl:apply-templates select="@*|node()"/>
    </Result>
</xsl:template>

<xsl:template match="input/*/*" />

你的意思是这样的:

XSLT样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
 <xsl:template match="input">
  <output>
    <xsl:apply-templates>

    </xsl:apply-templates>      
  </output>    
 </xsl:template>

  <xsl:template match="input/*">
   <xsl:element name="{name()}">
    <xsl:apply-templates></xsl:apply-templates>
   </xsl:element>      
  </xsl:template>


  <xsl:template match="input/*/*">
    <xsl:if test="contains(name(),'Element')">
    <xsl:element name="Result">
        <xsl:value-of select="current()"/>
    </xsl:element>


    </xsl:if>
  </xsl:template>


</xsl:stylesheet>

XML示例(您的):


价值1
价值2
价值3
名称
数字
地址
价值1
价值2
名称
数字
地址
结果:

<?xml version="1.0" encoding="UTF-8"?><output>
    <A>
        <Result>Value1</Result>
        <Result>Value2</Result>
        <Result>Value3</Result>



    </A>
    <B>
        <Result>Value1</Result>
        <Result>Value2</Result>



    </B>
</output>

价值1
价值2
价值3
价值1
价值2

在这种情况下,您能显示预期的输出吗?您想要的只是输出中名为“Element…”的元素,还是还需要“name”、“ID”和“address”呢?谢谢我只需要输出中名为“Element”的元素。Sune和Tim,我非常感谢。非常感谢你。工作得很好@阿卜杜勒·卡迪尔:如果有帮助,请回答这个问题。谢谢
<xsl:template match="input/*/*[starts-with(name(), 'Element')]" priority="2">
    <Result>
        <xsl:apply-templates select="@*|node()"/>
    </Result>
</xsl:template>

<xsl:template match="input/*/*" />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
 <xsl:template match="input">
  <output>
    <xsl:apply-templates>

    </xsl:apply-templates>      
  </output>    
 </xsl:template>

  <xsl:template match="input/*">
   <xsl:element name="{name()}">
    <xsl:apply-templates></xsl:apply-templates>
   </xsl:element>      
  </xsl:template>


  <xsl:template match="input/*/*">
    <xsl:if test="contains(name(),'Element')">
    <xsl:element name="Result">
        <xsl:value-of select="current()"/>
    </xsl:element>


    </xsl:if>
  </xsl:template>


</xsl:stylesheet>
<input>
    <A>
        <Element1>Value1</Element1>
        <Element2>Value2</Element2>
        <Element3>Value3</Element3>
        <name>name</name>
        <ID>idmumber</ID>
        <address>address</address>
    </A>
    <B>
        <Element1>Value1</Element1>
        <Element2>Value2</Element2>
        <name>name</name>
        <ID>idmumber</ID>
        <address>address</address>
    </B>
</input>
<?xml version="1.0" encoding="UTF-8"?><output>
    <A>
        <Result>Value1</Result>
        <Result>Value2</Result>
        <Result>Value3</Result>



    </A>
    <B>
        <Result>Value1</Result>
        <Result>Value2</Result>



    </B>
</output>