С таким простым XML-кодом, как этот
<value>
<num>
<accession>111</accession>
<sequence>AAA</sequence>
<score>4000</score>
</num>
</value>
Я хочу знать, возможно ли получить доступ к определенному узлу с узла, ранее сохраненного в переменной. Код XSLT очень короткий и лучше объясняет, что я хочу сказать
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/value/num">
<xsl:variable name="node">
<xsl:copy-of select="current()"/>
</xsl:variable>
<root>
<xsl:copy-of select="$node"/>
</root>
</xsl:template>
</xsl:stylesheet>
Итак, я храню узел в переменной «узел». Затем я могу напечатать содержимое узла с помощью $node
.
(РЕДАКТИРОВАТЬ) XML вывод
<root>
<num>
<accession>111</accession>
<sequence>AAA</sequence>
<score>4000</score>
</num>
</root>
Что я хочу сделать, это напечатать содержимое подузла, как это
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/value/num">
<xsl:variable name="node">
<xsl:copy-of select="current()"/>
</xsl:variable>
<root>
<xsl:copy-of select="$node/accession"/>
</root>
</xsl:template>
</xsl:stylesheet>
Но выдает ошибку (Компонент вернул код ошибки: 0x80600008 [nsIXSLTProcessor.transformToFragment]) (отметьте здесь )
(РЕДАКТИРОВАТЬ) XML, который я хотел бы, это
<root>
<accession>111</accession>
</root>
ПРИМЕЧАНИЕ. Вопрос не в том, как я могу получить этот вывод. Вопрос в том, как, используя переменную, как в предоставленном XSLT, я могу получить этот вывод.
(РЕДАКТИРОВАТЬ: решаемые)
На самом деле это возможно, но, как указано в комментариях, значение переменной должно быть присвоено с атрибутом «select», если требуется набор узлов. Таким образом, этот код не работал, так как в переменной был сохранен фрагмент дерева вместо набора узлов (подробнее см. здесь )
Спасибо!