2016-11-18 3 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 

Я хотел бы иметь уникальные столбцы на пользовательские поля. Итак, моя идея состояла в том, чтобы преобразовать исходный XML, изменив имя тега «CustomField» (без «s»), чтобы сделать его уникальным. Я решил объединить «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, that works great! – Dessoul

Смежные вопросы