У меня есть таблица стилей XSLT, которая преобразует XML-файл в формат JSON, а часть схемы для XML позволяет любому XML что-то еще, что мне нужно просто закодировать как строку в соответствующий JSON.XML XSLT Transform to XML
У меня есть элементы, создаваемые ОК. У меня просто возникают проблемы с правильной ведением пространств имен.
Проблема в том, что каждое отдельное пространство имен в области текущего элемента выводится для каждого отдельного элемента. Я просто хочу выводить пространства имен, поскольку они сначала объявлены в исходном XML.
Это то, что я в настоящее время пытаюсь сделать, я пробовал несколько вещей и не могу найти способ сделать то, что мне нужно.
Я называю шаблон, который отвечает за преобразование атрибутов для текущего узла с:
<xsl:call-template name="elementAttributes">
<xsl:with-param name="element" select="."/>
</xsl:call-template>
С следующим шаблоном:
<xsl:template name="elementAttributes">
<xsl:param name="element"/>
<xsl:for-each select="$element/namespace::*">
<!--dont include default namespace-->
<xsl:if test="boolean(name())">
<xsl:text> </xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>='</xsl:text>
<xsl:value-of select="."/>
<xsl:text>'</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
Так, например с XML:
<valueString>
<dms:animal xmlns:dms="http://test.net/2012/dms/">
<dms:dog>woof</dms:dog>
<dms:cat>meow</dms:cat>
<reptile:crocodile xmlns:reptile="http://reptile.test.net/2012/dms/"></reptile:crocodile>
</dms:animal>
</valueString>
Я заканчиваю:
<dms:animal dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' xml='http://www.w3.org/XML/1998/namespace'>
<dms:dog dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' xml='http://www.w3.org/XML/1998/namespace'>woof</dms:dog>
<dms:cat dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' xml='http://www.w3.org/XML/1998/namespace'>meow</dms:cat>
<reptile:crocodile dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' reptile='http://reptile.test.net/2012/dms/' xml='http://www.w3.org/XML/1998/namespace'/>
, когда я только в основном хотят получить обратно тот же XML.
Я знаю, что можно сделать копию, чтобы легко скопировать XML в выходной файл, но с тех пор, как я выводил результаты в виде текста из-за формата JSON, я не мог заставить его работать так, как только текст узлы будут скопированы, а не структура XML.
Майкл Кей прав. Посмотрите на код моего XPath Visualizer, чтобы посмотреть, как это делается: http://www.huttar.net/dimitre/XPV/TopXML-XPV.html –