Xslt将元素转换为数组元素

时间:2018-03-11 06:27:44

标签: xml xslt

我的业务要求是将输入XML转换为转换后的XML。

输入XML如下

<root>   
    <name>football</name>  
    <pageTitle>League</pageTitle>  
    <pageMetaDescription>Inter City League</pageMetaDescription>     
</root>

基于XSLT的转换后预期的输出Xml

<root>  
  <Array>
    <name>name</name>
    <text>football</text>      
    <format>plainText</format>
  </Array>
  <Array>
    <name>pageTitle</name>
    <text>League</text>      
    <format>plainText</format>
  </Array>
  <Array>
    <name>pageMetaDescription</name>
    <text>Inter City League</text>      
    <format>plainText</format>
  </Array>   
</root>  

为了执行此类转换,我无法编写XSLT 任何人都可以让我知道如何为这样的要求编写这样的XSLT。

1 个答案:

答案 0 :(得分:1)

您编写了I am not able to write XSLT,但我将其视为我对XSLT的了解 太有限了,需要帮助怎么做。 无论如何,你把这个问题标记为a.o.只需 XSLT

匹配root的模板与 identity teplate 非常相似。

但是匹配其子元素的模板更复杂:

  • Array开始标记开始。
  • 然后写下它的内容,包括:
    • name标记,其值等于标记的名称( name())。
    • text代码,其值等于代码的内容()。
    • format标记内容为plainText
  • Array结束标记结束。

所以整个脚本可能如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" encoding="UTF-8" indent="yes" />

  <xsl:template match="root">
    <root>
      <xsl:apply-templates/>
    </root>
  </xsl:template>

  <xsl:template match="root/*">
    <Array>
      <name><xsl:value-of select="name()"/></name>
      <text><xsl:value-of select="."/></text>
      <format>plainText</format>
    </Array>
  </xsl:template>
</xsl:transform>

你没有写它,但如果你有其他的源标签案例 除 plainText 之外的格式(例如 date ),你必须写 其他模板(匹配这些标签名称),以及各自的详细信息 另一种说法。