У меня проблемы с предшествующим родным братом.Это действительно работает?
XSL выглядит примерно примерно так:
<stored-procedure id="search-algorithm-parent-child">
<xsl:stylesheet version="1.0" xmlns:spbc="urn:lsapps.spbcontext" xmlns:user="http://www.lodestarcorp.com" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|/|@*">
<query name="CMNUALGPARENTCHILD">
<sql>
SELECT
parent.UIDALGLIBPARENTDTL as UIDPARENT,
parent.PARENTCHANNELID as VMCHANNELNUMBER,
parent.UOMCODE as UOM,
child.CHILDDCFLOW AS DCFLOW,
FROM
##Q.NUALGLIBPARENTDTL parent,
##Q.NUALGLIBCHILDDTL child
WHERE
child.UIDALGLIBPARENTDTL = parent.UIDALGLIBPARENTDTL
AND parent.UIDALGLIBRARY = '<xsl:value-of select="@UIDALGLIBRARY"/>'
ORDER BY UIDPARENT
</sql>
</query>
</xsl:template>
</xsl:stylesheet>
</stored-procedure>
Я не знаю, как выглядит XML, когда я передаю выше XSL в LsdbCommand в моемasp вот так :
var xmlTable5 = LsdbCommand("LSDB.search-algorithm-parent-child", PrefixParams1.valueOf());
Я предполагаю, что данные XML будут примерно такими (заказано UIDPARENT):
<CMNUALGPARENTCHILD>
<someNode>
<UIDPARENT>21</UIDPARENT>
<VMCHANNELNUMBER>123</VMCHANNELNUMBER>
<UOM>5<UOM>
<DCFLOW>R<DCFLOW>
</someNode>
<someNode>
<UIDPARENT>21</UIDPARENT>
<VMCHANNELNUMBER>123</VMCHANNELNUMBER>
<UOM>5<UOM>
<DCFLOW>R<DCFLOW>
</someNode>
...
</CMNUALGPARENTCHILD>
Пока что мойбеспокойство UIDPARENT .. Я уверен, что результат будет иметь следующий UIDPARENT .. (по порядку)
21
21
21
81
81
81
Теперь, в asp, я называю это
tTable5 = ProcessXsl(xmlTable5, XmlFreeFile("../zAlgorithmLibrary/AlgorithmParentChild.xslt"));
где AlgorithmParentChild.xslt просто
<x:stylesheet version="1.0"
xmlns:x="http://www.w3.org/1999/XSL/Transform"
xmlns:i="urn:ls-i18n-formatter"
xmlns:ms="urn:schemas-microsoft-com:xslt"
xmlns:user="http://www.lodestarcorp.com/user"
exclude-result-prefixes="x i ms user">
<x:param name="Portal">N</x:param>
<x:param name="Include">ALL</x:param>
<x:param name="OrderParams"></x:param>
<x:param name="FromParam"></x:param>
<x:param name="ROWPERPAGE">25</x:param>
<x:param name="AllowEdit"></x:param>
<x:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<x:template match="/">
<table class="FormTable">
<x:for-each select="//CMNUALGPARENTCHILD">
<tr>
<td>current <x:value-of select="@UIDPARENT"/></td>
<td>previous <x:value-of select="preceding-sibling::node()/@UIDPARENT"/></td>
<td>next <x:value-of select="following-sibling::node()/@UIDPARENT"/></td>
</tr>
</x:for-each>
</table>
</x:template>
<x:include href="../controls/MultiSortImages.xslt"/>
<x:include href="../controls/LockedColumns.xslt"/>
</x:stylesheet>
основная таблица выглядит следующим образом
current 21 previous next 21
current 21 previous 21 next 21
current 21 previous 21 next 81
current 81 previous 21 next 81
current 81 previous 21 next 81
current 81 previous 21 next
Кажется правильным для первых трех результатов ... но почему предшествующий элемент потерпел неудачу послетретья итерация?Должно быть возвращено следующее:
current 21 previous next 21
current 21 previous 21 next 21
current 21 previous 21 next 81
current 81 previous 21 next 81
current 81 previous 81 next 81
current 81 previous 81 next
отлично работает следующий-родной брат ... есть ли какие-либо известные ограничения предшествующего родного брата?и можете ли вы предложить какой-нибудь обходной путь?
Обратите внимание, что я также пытался добавить [position=1]
или [position()]
или просто [1]
на previous-sibling :: node () / @ UIDPARENT, но он все еще имеет тот жерезультат ..
Пожалуйста, поймите, что я новичок в ASP, XSLT, XSL .. и что я поместил только фрагменты кода, а не весь код ..
Я просто хочу понятькак работает предшествующий брат ... его синтаксис, все в нем ..