как убрать префикс атрибута в теге XML? - PullRequest
0 голосов
/ 01 октября 2018

Мне нужно удалить внутри атрибута одного тега xml.и для этого я нахожу решение использовать xslt:

      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
</xsl:template>

<xsl:template match="@*">
    <xsl:attribute name="{local-name()}">
        <xsl:apply-templates select="node()|@*" />
    </xsl:attribute>
</xsl:template>

, оно работает хорошо, даже слишком много, потому что после процедуры удаления необходимые атрибуты становятся без префикса, но и без содержимого.По какой-то причине префикс и содержимое усекаются, остается только пустой атрибут, например, attr "xsi: type", префикс которого следует удалить:

<out:Declarant xsi:type="out:RequestAccount">

ожидалось следующее:

<out:Declarant type="out:RequestAccount">

но получил вот это:

<out:Declarant type="">

Я не понимаю, почему удаляется содержимое "type"?

вот где мой xsd файл для xmls: xsd image

1 Ответ

0 голосов
/ 01 октября 2018

Содержимое type удаляется, поскольку <xsl:apply-templates select="node()|@*" /> выбирает дочерние узлы (и атрибуты) текущего атрибута, но у атрибутов нет дочерних узлов (или атрибутов), как у элементов.

Вместо этого,просто сделай это ...

<xsl:value-of select="." />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...