带有标记内容的XML更改标记名称

时间:2016-11-18 10:57:22

标签: xml xslt

我有一个XML文件,如下所示:

<MyObject>
    <ID>1</ID>
    <Name>Foo</Name1>
    <Color>Blue</Color>
    ...
    <CustomFields>
        <CustomField>
            <Name>cf1</Name>
            <Type>boolean</Type>
            <Value>true</Value>
        </CustomField>
        <CustomField>
            <Name>cf2</Name>
            <Type>interger</Type>
            <Value>1</Value>
        </CustomField>
        ...
    </CustomFields>
</MyObject>

问题是当我在Excel中导入它时,Excel会创建2行:

ID , Name , Color , CustomField/Name , CustomField/Type , CustomField/Value
1 , Foo , Blue , cf1 , boolean , true
1 , Foo , Blue , cf2 , integer, 1

我希望每个自定义字段都有唯一的列。 所以我的想法是通过更改“CustomField”(没有“s”)标记名来转换源XML,使其唯一。我想将“CustomField”与“Name”标签内容连接起来。

所以,我将改造

<CustomField>
    <Name>cf1</Name>
    <Type>boolean</Type>
    <Value>true</Value>
</CustomField>
<CustomField>
    <Name>cf2</Name>
    <Type>interger</Type>
    <Value>1</Value>
</CustomField>

<CustomField_cf1>
    <Name>cf1</Name>
    <Type>boolean</Type>
    <Value>true</Value>
</CustomField_cf1>
<CustomField_cf2>
    <Name>cf2</Name>
    <Type>interger</Type>
    <Value>1</Value>
</CustomField_cf2>

问题在于我不知道如何使用子节点的值更改某些选定的标签名称。

我研究过XSLT,但显然我没有达到要求的水平。 所以我对任何解决方案持开放态度。

THX

2 个答案:

答案 0 :(得分:0)

使用身份转换模板和模板

<xsl:template match="CustomField">
  <xsl:element name="{name()}_{Name}">
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

答案 1 :(得分:0)

试试这个,

我添加了您需要的相关转换。

http://xsltransform.net/ejivdHb/13