конвертировать xml, используя узел xslt в качестве тега, текст в качестве значения - PullRequest
1 голос
/ 12 августа 2011

я хотел бы преобразовать xml, что:

тег - это имя текущего узла (это я сам сделал) значение между узлами было между моими новыми тегами

Это мой код:

<?xml version="1.0" encoding="UTF-8"?>

<IDataXMLCoder version="1.0">
  <record javaclass="xxx">
    <record name="result" javaclass="yyy">
      <value name="errorCode">0</value>
      <value name="errorDesc">OK</value>
    </record>
  </record>
</IDataXMLCoder>

И я хотел бы преобразовать в нечто подобное:

<IDataXMLCoder>
    <record>
        <result>
            <errorCode>0</errorCode>
            <errorDesc>OK</errorDesc>
        </result>
    </record>
</IDataXMLCoder>

Как видите,

name="errorCode"
теперь является именем узла. Значение этого узла
0
Я написал этот код:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="no" indent="yes"/>
    <!--<xsl:strip-space elements="*"/>--> <!--po usunieciu nie bedzie wciec-->

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match=
                          "*/@*[contains('|javaclass|version|',
                      concat('|',name(),'|')
                      )
            ]"/>
    <xsl:template match="@*">
        <xsl:element name="{current()}">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

И я получил это:

<IDataXMLCoder>
  <record>
    <record>
<result>result</result>
      <value>
<errorCode>errorCode</errorCode>0</value>
      <value>
<errorDesc>errorDesc</errorDesc>OK</value>
    </record>
  </record>
</IDataXMLCoder>

Итак, как я могу превратить это в то, что я хочу? Спасибо за любую помощь.

1 Ответ

2 голосов
/ 12 августа 2011

Вот примерная таблица стилей, которая достигает описанного результата для опубликованного входного образца:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="*[@name]">
    <xsl:element name="{@name}">
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

Если этого недостаточно, вам нужно объяснить ваши требования более подробно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...