Я создал простой XSL-файл, который выполняет преобразование в файле XML. Теперь преобразование возвращает True или False (в зависимости от результата теста), если прошло = true, fail = false. Теперь я хочу добавить дополнительный тег в свой XML с этими значениями Я видел сообщение this и попытался адаптировать его к моей проблеме, однако он не совсем сработал.Как добавить элемент в XML через XSL
Мой файл XML изначально выглядит следующим образом
<?xml version="1.0" encoding="iso-8859-1"?>
<message>
<unique-id>unique-id</unique-id>
<payload>
<Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://mappings.f4f.com/F4FXML/Schemas/v5/financial.xsd">
<EnvelopeHeader>
<SchemaVersion>5.1</SchemaVersion>
<EnvelopeCreated>20140108</EnvelopeCreated>
<EnvelopeTrackingID>1746978</EnvelopeTrackingID>
<EnvelopeRevisionNumber>1</EnvelopeRevisionNumber>
<SourcePartnerID>UK0000001088</SourcePartnerID>
<SourceDivisionID>UK0000001088</SourceDivisionID>
<DestinationPartnerID>ang</DestinationPartnerID>
<DestinationDivisionID>9725652</DestinationDivisionID>
<TestIndicator>True</TestIndicator>
</EnvelopeHeader>
<!--...... stuff totally irrelevant below-->
</Envelope>
</payload>
<metadata>
<metadata-element>
<key>messageuniqueid</key>
<value>unique-id</value>
</metadata-element>
<metadata-element>
<key>PostCode</key>
<value>NR9 5BZ</value>
</metadata-element>
</metadata>
</message>
Затем я запускаю какой-то файл преобразования, который проверяет, если заданное значение элемента, как ожидается, или нет. Мое исходящее сообщение должно выглядеть следующим образом:
<message>
<unique-id>unique-id</unique-id>
<payload>Some gibberish here</payload>
<metadata>
<metadata-element>
<key>messageuniqueid</key>
<value>unique-id</value>
</metadata-element>
<metadata-element>
<key>PostCode</key>
<value>NR9 5BZ</value>
</metadata-element>
<metadata-element>
<key>TestResult</key>
<value>True/False</value>
</metadata-element>
</metadata>
</message>
Файл XML, который я в настоящее время это:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<axsl:stylesheet xmlns:axsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:exsl="http://exslt.org/common" xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="2.0">
<axsl:output method="text"/>
<axsl:template match="*|@*" mode="schematron-get-full-path">
<axsl:apply-templates select="parent::*" mode="schematron-get-full-path"/>
<axsl:text>/</axsl:text>
<axsl:if test="count(. | ../@*) = count(../@*)">@</axsl:if>
<axsl:value-of select="name()"/>
<axsl:text>[</axsl:text>
<axsl:value-of select="1+count(preceding-sibling::*[name()=name(current())])"/>
<axsl:text>]</axsl:text>
</axsl:template>
<axsl:template match="/">
<axsl:apply-templates select="/" mode="M0"/>
</axsl:template>
<axsl:template match="Envelope/EnvelopeHeader" priority="101" mode="M0">
<axsl:choose>
<axsl:when test="EnvelopeTrackingID = 1746978">
<axsl:copy-of select="true()"/>
</axsl:when>
<axsl:otherwise>
<axsl:copy-of select="false()"/>
</axsl:otherwise>
</axsl:choose>
<axsl:apply-templates mode="M0"/>
</axsl:template>
<axsl:template match="text()" priority="-1" mode="M0"/>
<axsl:template match="text()" priority="-1"/>
</axsl:stylesheet>
Как вы видите, я установить истину/ложь в зависимости от результата теста, но теперь как добавить это в теги метаданных? как ключевое значение?
Благодаря
Вы имеете в виду, полученный элемент 'value' имеет _either_ истинным или ложным? Кроме того, на простом английском языке: на каком основании (то есть какое условие) вы вставляете true или false? –
@ MathiasMüller Если значение EnvelopeTrackingID равно euqial до 123456 *, тогда я хочу, чтобы значение элемента было равно True. Если идентификатор отслеживания конверта не равен 123456, я хочу, чтобы значение элемента было равно false –
Хорошо. Затем, пожалуйста, не используйте «валидацию», чтобы описать это, потому что это означало бы проверку на схему или DTD. –