XSLT:重命名XML属性

时间:2017-04-03 08:17:09

标签: xml xslt

我有以下XML

<message code="100" description="checkSnr">
 <string name="id" />
 <string name="serialNr" />
</message>  

现在我基本上想重命名

<string name="serialNr" />

<string name1="serialNr" />

我读了关于这个主题的所有其他问题,但没有一个对我有用 这背后的想法很简单:单个字符串应该彼此不同。例如:

<xsl:value-of select="message/string/@name"  />

将是&#34; id&#34;。

<xsl:value-of select="message/string/@name1"  />

将是&#34; serialNr&#34;。
我希望它们列在CSV中,例如&#34; id; serialNr&#34;我没有重命名属性的实际输出是&#34; id; id&#34;。如果您有任何其他想法如何解决此问题,您的解决方案也会受到赞赏! 提前谢谢。

2 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" />

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

  <xsl:template match="string/@name">
    <xsl:attribute name="name1">
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

如果@TimC已经正确猜到了你的真实需求,那么你想要

<xsl:template match="message">
  <xsl:apply-templates select="string"/>
</xsl:template>

<xsl:template match="string">
  <string>
    <xsl:attribute name="name{position()}">
      <xsl:value-of select="@name"/>
    </xsl:attribute>
  </string>
</xsl:template>