Как я понимаю, функция xslt generate-id()
вернет уникальный идентификатор в зависимости от node
и его контекста (предков).xslt: contextless 'generate-id'?
Есть ли способ получить идентификатор, который зависит только от node
(и его подносов), а не от его положения в документе?
При использовании xinclude
идентичные узлы могут быть помещены в разные местоположения - и, следовательно, генерируются две разные идентификаторы. Как создать буквенно-цифровую строку, которая будет идентичной для каждого экземпляра набора узлов, который был вставлен в документ через xinclude
?
Так у меня есть файл node.xml
:
<?xml version="1.0" encoding="utf-8"?>
<node name="joe"/>
И в document.xml
:
<?xml version="1.0" encoding="utf-8"?>
<document xmlns:xi="http://www.w3.org/2003/XInclude">
<container name="first">
<xi:include href="node.xml"/>
</container>
<container name="second">
<xi:include href="node.xml"/>
</container>
</document>
И в process.xslt
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="container">
this will not be identical for different matches of the template, although the matched <node/> has the same content: '<xsl:value-of select="generate-id(node)"/>'
appending some attributes this is too simple, there might be differences deeper down the hierarchy, which should resolve in a different id: '<xsl:value-of select="node/@name"/>'
</xsl:template>
</xsl:stylesheet>
процесса с xsltproc --xinclude process.xslt document.xml
. Мне нужен один и тот же идентификатор/строка для обоих вхождений <node/>
, так как они идентичны.
Приветствия
Argh. this выглядит очень похоже. Однако я не хочу вручную конкатцировать значения ...? Это не легко масштабировать в моем случае ... Может быть, я смогу что-то сделать, используя number()
, но кажется, что должно быть что-то еще ...
ps: using xsltproc, так что не причудливая ...; -)
Подумайте, чтобы показать нам образец ввода XML и требуемый результат. Я не понимаю, как xinclude относится к XSLT и генерирует идентификаторы. –
добавлены некоторые примеры –
Вы можете предварительно обработать включенный xml и поместить идентификатор на каждый узел. Затем используйте это вместо создания новых идентификаторов. Не должно быть слишком сложно? –