2016-11-18 58 views
1

我有一个看起来像这样的XML文件: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

回答

0

使用身份转换模板加上一个模板

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

Thx,这很好! – Dessoul