Я пытаюсь передать динамический параметр при вызове шаблона для подавления узлов из xml.
Я бы назвал этот шаблон выглядит так:
transform employee.xml suppress.xsl ElementsToSuppress=id,fname
employee.xml
<?xml version="1.0" encoding="utf-8" ?>
<Employees>
<Employee>
<id>1</id>
<firstname>xyz</firstname>
<lastname>abc</lastname>
<age>32</age>
<department>xyz</department>
</Employee>
<Employee>
<id>2</id>
<firstname>XY</firstname>
<lastname>Z</lastname>
<age>21</age>
<department>xyz</department>
</Employee>
</Employees>
Suppress.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0" xmlns:elements="http://localhost">
<elements:name abbrev="id">id</elements:name>
<elements:name abbrev="fname">firstname</elements:name>
<xsl:param name="ElementsToSuppress" ></xsl:param>
<xsl:variable name="tokenizedSample" select="tokenize($ElementsToSuppress,',')"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<xsl:for-each select="$tokenizedSample">
<xsl:call-template name ="Suppress" >
<xsl:with-param name="parElementName">
<xsl:value-of select="."/>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="Suppress">
<xsl:param name="parElementName" select="''"></xsl:param>
<xsl:variable name="extNode" select="document('')/*/elements:name[@abbrev=$parElementName]"/>
<xsl:call-template name="test" >
<xsl:with-param name="parElementName" >
<xsl:value-of select="$extNode"/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="test" match="*[name() = $parElementName]" >
<xsl:param name="parElementName" select="''"></xsl:param>
<xsl:call-template name="SuppressElement" />
</xsl:template>
<xsl:template name="SuppressElement" />
</xsl:stylesheet>
Можем ли мы добиться результатов, используя этот или какой-либо другой способ? Идеальный способ - передать сокращения узлов, разделенных запятыми, и подавить их за один вызов.
Любая помощь будет принята с благодарностью.
С уважением, {args = некоторые данные, которые были прочитаны; ThreadPool.QueueUserWorkItem (new WaitCallback (threadRunner), ...
Я использую ThreadPool для постановки в очередь 1000 рабочих элементов
While(reading in data for processing)
{
args = some data that has been read;
ThreadPool.QueueUserWorkItem(new WaitCallback(threadRunner), args);
}
Это работает очень хорошо, однако, поскольку основной поток помещает запросы в очередь быстрее, чем они обрабатываются в памяти медленно съедается.
Я хотел бы сделать что-то вроде следующего, чтобы ограничить очередь по мере роста очереди
Thread.Sleep(numberOfItemsCurrentlyQueued);
Это привело бы к увеличению времени ожидания по мере роста очереди.
Есть ли способ узнать, как много элементов в очереди?