【问题标题】:Transform tags XML to XML using XSLT使用 XSLT 将标签 XML 转换为 XML
【发布时间】:2017-12-25 02:21:05
【问题描述】:

我是 XSLT 的新手,我正在尝试将 XML 转换为其他格式。

源 XML 是这样的:

<NoticeContent>
      <Version> 1.0 </Version>
      <Publisher>me</Publisher> 
      <Specification>1</Specification>
      <Instance>1</Instance>
      <NewState>10</NewState>
      <Info>
        <SDTInInfoExtra>
            <Name> Client</Name>
            <Value> 1 </Value>
        </SDTInInfoExtra>
        <SDTInInfoExtra>
            <Name> LocalId </Name>
            <Value>10 </Value>
        </SDTInInfoExtra>      
      </Info>
</NoticeContent>

和预期的:

<?xml version="1.0" encoding="UTF-8"?>
<NoticeContent>
    <Version></Version>
    <Timestamp></Timestamp>
    <Publisher></Publisher>
    <Instance></Instance>
    <NewState></NewState>
    <Info>
        <Characteristic name="Client" value="1" />
        <Characteristic name="LocalId" value="10" />
    </Info>
</NoticeContent>    

我正在尝试使用以下 XSL:

<?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" indent="yes" />
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Info">
        <xsl:for-each select="SDTInInfoExtra">
            <xsl:value-of select="Name" />
            <xsl:value-of select="Value" />
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

问题是尝试将标签转换为:

<SDTInInfoExtra>
       <Name> LocalId </Name>
        <Value>10 </Value>
</SDTInInfoExtra>  

进入:

 <Characteristic name="Client" value="1" />

非常感谢您的帮助!

【问题讨论】:

    标签: xml xslt mapping


    【解决方案1】:

    你已经开始了

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

    剩下的就很简单了:

    <xsl:template match="SDTInInfoExtra">
      <Characteristic name="{Name}" value="{Value}"/>
    </xsl:template>
    

    【讨论】:

    • 谢谢!我找到了另一个解决方案:“属性名称”,但你的更短更好。
    猜你喜欢
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多