Nano Hash - криптовалюты, майнинг, программирование

Самый оптимальный способ переименовать теги XML с помощью XSLT

Вот мой XML-файл:

  <?xml version="1.0" encoding="utf-8"?>
<consentException fpmlVersion="5-6" >
    <header>
        <messageId messageIdScheme="www.test.com">LH_msf_id</messageId>
        <inReplyTo messageIdScheme="">2424234243</inReplyTo><!-- message Id of entering party  -->
        <sentBy>test</sentBy>
        <sendTo>SEF1</sendTo>
        <creationTimestamp>2010-09-09T10:00:00-00:00</creationTimestamp>
    </header>
    <correlationId correlationIdScheme="">SEF_correlationId</correlationId>
    <reason>
        <reasonCode>3500001</reasonCode>
        <description>Invalid Currency ABC</description>
    </reason>
    <reason>
        <reasonCode>3500043</reasonCode>
        <description>Organization XYZ is not defined</description>
    </reason>
</consentException>

Вот мой файл XSLT:

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

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

<xsl:template match="consentException/header/sentBy"> 
  <Hello><xsl:apply-templates select="@*|node()"/></Hello>
</xsl:template>

</xsl:stylesheet>

Здесь код XSLT заменяет тег в файле xml: (тег Hello)

<?xml version="1.0" encoding="UTF-8"?><consentException fpmlVersion="5-6">
    <header>
        <messageId messageIdScheme="www.test.com/">LH_msf_id</messageId>
        <inReplyTo messageIdScheme="">2424234243</inReplyTo><!-- message Id of entering party  -->
        <Hello>Test</Hello>
        <sendTo>SEF1</sendTo>
        <creationTimestamp>2010-09-09T10:00:00-00:00</creationTimestamp>
    </header>
    <correlationId correlationIdScheme="">SEF_correlationId</correlationId>
    <reason>
        <reasonCode>3500001</reasonCode>
        <description>Invalid Currency ABC</description>
    </reason>
    <reason>
        <reasonCode>3500043</reasonCode>
        <description>Organization XYZ is not defined</description>
    </reason>
</consentException>

Но если бы я хотел, чтобы вы заменили ВСЕ теги в файле XML, а не указывали каждый тег, есть ли лучший способ сделать это?

Я не уверен в этом, но если есть файл, который содержит теги XML и какие теги XML необходимо заменить, может ли он каким-то образом ссылаться на файл с кодом XSLT?

Я пытаюсь найти наиболее оптимальный способ выполнения этой задачи.
Примечание. Замена тегов ДОЛЖНА выполняться только с кодом XSLT.

ОБНОВЛЕНИЕ

Вот как должен выглядеть окончательный XML:

<?xml version="1.0" encoding="utf-8"?>
<consentException fpmlVersion="5-6" >
    <header>
        <FPHdMsgID FPHdMsgIDScheme="www.test.com">LH_msf_id</FPHdMsgID>
        <inReplyTo messageIdScheme="">2424234243</inReplyTo><!-- message Id of entering party  -->
        <FPHdSentBy>Traiana</FPHdSentBy>
        <FPHdSentTo>SEF1</FPHdSentTo>
        <FPHdCreateTime>2010-09-09T10:00:00-00:00</FPHdCreateTime>
    </header>
    <FPCorID FPCorIDSch="">SEF_correlationId</FPCorID>
    <reason>
        <FPRsnCode>3500001</FPRsnCode>
        <FPRsnDesc>Invalid Currency ABC</FPRsnDesc>
    </reason>
    <reason>
        <FPRsnCode>3500043</FPRsnCode>
        <description>Organization XYZ is not defined</description>
    </reason>
</consentException>
11.03.2015

  • Если вы хотите заменить имена всех элементов - на что их имена должны быть заменены? Как будет выглядеть результат? 11.03.2015

Ответы:


1

если был файл, который содержит теги XML и какие теги XML должны быть заменены, может ли он каким-то образом ссылаться на файл с кодом XSLT?

Да, но это, безусловно, не будет "наиболее оптимальным способом выполнения этой задачи", потому что это приведет к ненужному (и довольно дорогостоящему) шагу в процессе. Это могло бы быть хорошим подходом, если вам приходилось время от времени менять сопоставления переименования, и вы не хотите изменять основной документ XSLT в процессе. В противном случае лучше иметь шаблон для каждого переименования. XSLT естественно многословен, привыкайте к этому.

11.03.2015

2

Определите файл сопоставления следующим образом:

переименование.xml

<rename>
  <rename old="foo" new="bar"/>
  <rename old="fox" new="box"/>
</rename>

Затем напишите «мета-таблицу стилей» следующим образом:

<xsl:namespace-alias stylesheet-prefix='a' result-prefix="xsl"/>
<xsl:template match="rename">
  <a:template match="{@old}">
    <a:element name="{@new}">
      <a:copy-of select="@*"/>
      <a:apply-templates/>
    </a:element>
  </a:template>
</xsl:template>

Запустив эту метатаблицу стилей для rename.xml, вы получите таблицу стилей XSLT с одним правилом шаблона для каждого имени элемента, которую можно запустить для любого исходного документа и выполнить переименование.

Конечно, я упустил несколько деталей, таких как обработка элементов, имя которых отсутствует в файле переименования, или обработка пространств имен. Но задача достаточно проста.

11.03.2015
  • Привет, спасибо за ваш ответ, я сделал, как вы сказали, но я получаю эту ошибку. Префикс a для элемента a:template не привязан. 12.03.2015
  • Ну, я сказал, что упустил несколько деталей. Мне нравится указывать людям правильное направление, а не держать их за руку на всем пути к месту назначения. Если вы не знаете, как объявить пространство имен в своей таблице стилей, вам нужно кое-что прочитать. 12.03.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..