首页 > 解决方案 > 仅使用 XSLT 转换更改少量标签

问题描述

我有一条很大的 json 消息,我只想更改一些字段值。其余字段应与输入消息完全相同。如果不对 xslt 中的每个项目进行硬编码,有没有办法只更改选定的项目?

XML 输入负载

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <glossary>
      <title>example glossary</title>
      <GlossDiv>
         <GlossList>
            <GlossEntry>
               <Abbrev>ISO 8879:1986</Abbrev>
               <Acronym>SGML</Acronym>
               <GlossDef>
                  <GlossSeeAlso>
                     <element>GML</element>
                     <element>XML</element>
                  </GlossSeeAlso>
                  <para>A meta-markup language, used to create markup languages such as DocBook.</para>
               </GlossDef>
               <GlossSee>markup</GlossSee>
               <GlossTerm>Standard Generalized Markup Language</GlossTerm>
               <ID>SGML</ID>
               <SortAs>SGML</SortAs>
            </GlossEntry>
         </GlossList>
         <title>S</title>
      </GlossDiv>
   </glossary>
</root>

样本有效载荷

{
    "glossary": {
        **"title": "example glossary",**
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

预期产出

{
    "glossary": {
        **"title": "New value",**
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

我大胆地改变了领域

标签: xslt

解决方案


就 XML 到 XML 而言,这是基本的 XSLT

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

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

  <xsl:template match="glossary/title">
      <xsl:copy>New Value</xsl:copy>
  </xsl:template>
</xsl:stylesheet>

使用身份转换模板以及要转换的元素或属性(或一般节点)的附加模板。

转换为 JSON 是一个不同的问题。


推荐阅读