Мне нужна помощь с проблемой в моем коде xslt. Используется процессор/отладчик & IDE: (. Лесенки вниз только к элементам мне нужно для моего выбора) MSXML 6.0 в MS Visual Studio 2012.XSLT 1.0 получить отличные значения не удалось
Мой точный вход
<?xml version="1.0" encoding="UTF-8"?>
<root>
<components>
<Object3D id="130" plName="STF45668"/>
<Object3D id="131" plName="RIOD122"/>
<Object3D id="132" plName="RIOD122"/>
<Object3D id="133" plName="RIOD122"/>
<Object3D id="182" plName="RIOD124"/>
<Object3D id="183" plName="RIOD124"/>
<Object3D id="184" plName="RIOD124"/>
<Object3D id="185" plName="RIOD124"/>
</components>
</root>
Мой XSLT:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:key name ="objectsByName" use="/root/components/Object3D" match="@plName"/>
<xsl:output media-type="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:variable name="allObjs" select="//Object3D"/>
<xsl:variable name="distinctObjsCount"
select="//Object3D[count(. | key('objectsByName', @plName)[1]) = 1]"/>
<xsl:variable name="distinctObjsGenID"
select="//Object3D[generate-id() =
generate-id(key('objectsByName', @plName)[1])]"/>
<xsl:for-each select="//Object3D[count(. | key('objectsByName', @plName)[1]) = 1]">
<xsl:value-of select="concat(@plName, '(',count(key('objectsByName', @plName)),')')"/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Это выход преобразование я получаю:
<?xml version="1.0" encoding="utf-8"?>
STF45668(0), RIOD122(0), RIOD122(0), RIOD122(0), RIOD124(0), RIOD124(0), RIOD124(0), RIOD124(0)
Но я не получаю отличные значения от этих объектов Object3D.
Итак ... Я понятия не имею, почему это происходит не так. У кого-нибудь есть идея, что я делаю неправильно?
Редактировать: теперь 1: 1 в файлы, которые я использую.
Пожалуйста, покажите полную таблицу стилей XSLT, чтобы мы могли воспроизвести вашу проблему. Кроме того, был бы полезен полный ввод XML. Благодаря! –
Я не думаю, что вы действительно этого хотите. Реальный входной файл имеет около 5 тыс. Строк генерируемого программой кода XML, файл xsl имеет около 4k строк. Это потому, что я создаю .odt-файл из готовых шаблонов -> огромные накладные расходы. Я могу добавить все атрибуты, релевантные для затронутых элементов. –
Я не просил свалить все, что у вас есть. Но если вы хотите, чтобы люди отслеживали ошибку/несогласованность/неожиданный результат, вы действительно a) должны публиковать все или b) изолировать эту проблему в небольшом подмножестве вашего ввода и кода. В противном случае все ставки отключены. –