Изменить несколько тегов только с помощью XSLT-преобразования - PullRequest
0 голосов
/ 13 марта 2019

У меня большое сообщение 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"
                }
            }
        }
    }
}

Я выделил изменяющиеся поля

1 Ответ

1 голос
/ 14 марта 2019

С точки зрения 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 - это другая проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...