我是XSLT的新手,并且XML结构看起来像这样:
<Loop LoopId="1000A" Name="SUBMITTER NAME">
.... a bunch of sub-elements, etc.
</Loop>
我正在尝试编写一个将它们全部转换为此的XSLT: (将LoopId属性的值连接到其父元素名称)
<Loop1000A LoopId="1000A" Name="SUBMITTER NAME">
.... a bunch of sub-elements, etc.
</Loop1000A>
我有一个样式表几乎可以让我一路走来,但是它摆脱了LoopId属性,我不知道为什么 - 下面的样式表产生了这个结果:
<Loop1000A Name="SUBMITTER NAME">
.... a bunch of sub-elements, etc.
</Loop1000A>
有没有办法修改它,所以我保留LoopId属性?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@LoopId"/>
<xsl:template match="*[@LoopId]">
<xsl:variable name="vRep" select="concat('Loop',@LoopId)"/>
<xsl:element name="{$vRep}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
由于
答案 0 :(得分:1)
变化:
<xsl:element name="{concat('Loop', @LoopId)}">
为:
static void Main(string[] args)
{
int input = int.Parse(Console.ReadLine());
int zeroes = 0;
List<int> myList = ATM(input);
foreach(var number in myList.ToArray())
{
if (number != 0)
{
myList.AddRange(ATM(number));
}
else
{
continue;
}
}
foreach (var zero in myList)
{
if (zero == 0)
{
zeroes += 1;
}
}
Console.WriteLine(zeroes);
Console.ReadKey();
Console.ReadKey();
}
static List<int> ATM(int value)
{
List<int> exchangeCoins = new List<int>();
if (value != 0)
{
exchangeCoins.Add(value / 2);
exchangeCoins.Add(value / 3);
exchangeCoins.Add(value / 4);
}
else
{
throw new Exception("Value can't be zero!");
}
return exchangeCoins;
}
}
答案 1 :(得分:1)
删除模板<xsl:template match="@LoopId"/>
,就像删除LoopId
属性一样。