我不知道如何创建变量和助手。
我是使用XSLT的新手,我有一个XML文件,该文件包含一些节点,这些节点的节点上有一些子代,我需要使用for-each来计数这些子代(每个for-each,我需要将该计数加1并还有我想从1开始的计数器)
我不知道如何创建变量并将其分配给值1。
以下是我需要的示例:
<root>
<body>
<sec id="sec1">
<!--Parent also can contain no sub element or also can contain a free text-->
<p></p>
<p>some free text</p>
<p>
<!--Nodes I want to count it-->
<childNodes></childNodes>
<childNodes></childNodes>
<childNodes></childNodes>
<childNodes></childNodes>
<childNodes></childNodes>
<!--Nodes I want to count it-->
</p>
</sec>
<sec id="sec2">
<p>
<!--Nodes I want to count it-->
<childNodes></childNodes>
<childNodes></childNodes>
<childNodes></childNodes>
<childNodes></childNodes>
<childNodes></childNodes>
<!--Nodes I want to count it-->
</p>
<p>
<!--Nodes I want to count it-->
<childNodes></childNodes>
<childNodes></childNodes>
<childNodes></childNodes>
<childNodes></childNodes>
<childNodes></childNodes>
<!--Nodes I want to count it-->
</p>
</sec>
</body>
</root>
我需要这样的输出
<root>
<childNodes>
<count>
The count of all childNodes
</count>
</childNodes>
</root>
您能帮助解决该问题吗,谢谢!
答案 0 :(得分:0)
使用xml linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication58
{
class Program
{
static void Main(string[] args)
{
XElement root = new XElement("root");
XElement body = new XElement("body");
root.Add(body);
for (int id = 1; id <= 10; id++)
{
XElement newSec = new XElement("sec",
new XAttribute("id", "sec" + id.ToString()),
XElement.Parse("<!--Parent also can contain no sub element or also can contain a free text--><p></p>"),
new XElement("p", "some free text")
);
body.Add(newSec);
XElement nodes = new XElement("p");
newSec.Add(nodes);
for (int childCount = 1; childCount <= 10; childCount++)
{
XElement newChild = new XElement("childNods", new XAttribute("id", "node" + childCount.ToString()),
"Child Text"
);
nodes.Add(newChild);
}
}
}
}
}
答案 1 :(得分:0)
基于共享的输出XML,有2种可能的输出选项。在XML中获取<childNodes>
的总数,或者获取p/childNodes
的单独计数。
<childNodes>
的总数可以使用下面的模板获取
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" />
<xsl:strip-space elements="*" />
<xsl:template match="root">
<xsl:copy>
<childNodes>
<count><xsl:value-of select="count(//childNodes)" /></count>
</childNodes>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出
<root>
<childNodes>
<count>15</count>
</childNodes>
</root>
如果您需要单独计数
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" />
<xsl:strip-space elements="*" />
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="p">
<xsl:if test="*">
<childNodes>
<count><xsl:value-of select="count(*)" /></count>
</childNodes>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
输出
<root>
<childNodes>
<count>5</count>
</childNodes>
<childNodes>
<count>5</count>
</childNodes>
<childNodes>
<count>5</count>
</childNodes>
</root>