#xml #xslt #xslt-1.0
#xml #xslt #xslt-1.0
Вопрос:
У меня есть этот XML-файл, и я применил XSLT. Результат, который я хочу, — добавить новый элемент, но тот, который не содержит пространства имен.
<?xml version="1.0" encoding="UTF-8"?> <ITIN3 />
<Export xmlns="http://www.ibm.com/maximo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
creationDateTime="2018-09-29T12:53:10 02:00" transLanguage="EN" baseLanguage="EN"
messageID="24242525" maximoVersion="7 6 20190514-1348 V7611-365" event="1">
<MRCSet>
<MRC action="Add">
<PONUM>MPO15114</PONUM>
<POREVISIONNUM>0</POREVISIONNUM>
</MRC>
</MRCSet>
</Export>
Я применил этот XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mea="http://www.ibm.com/maximo" exclude-result-prefixes="mea">
<xsl:output omit-xml-declaration="no" indent="yes" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<!-- Identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/mea:Export/mea:MRCSet/mea:MRC">
<xsl:copy>
<xsl:copy-of select="@*"/>
<NEWINFO>1</NEWINFO>
<xsl:copy-of select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
И результат приведен ниже. Но я не хочу иметь это пространство имен xmlns. Я просто хочу новый элемент, как я его написал.
<?xml version="1.0" encoding="UTF-8"?>
<Export xmlns="http://www.ibm.com/maximo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
creationDateTime="2018-09-29T12:53:10 02:00"
transLanguage="EN"
baseLanguage="EN"
messageID="24242525"
maximoVersion="7 6 20190514-1348 V7611-365"
event="1">
<MRCSet>
<MRC action="Add">
<NEWINFO xmlns="">1</NEWINFO >
<PONUM>MPO15114</PONUM>
<POREVISIONNUM>0</POREVISIONNUM>
</MRC>
</MRCSet>
</Export>
Ответ №1:
Добавьте xmlns="http://www.ibm.com/maximo"
к xsl:stylesheet
элементу или, по крайней мере, к NEWINFO
элементу.
Комментарии:
1. Спасибо. Но можете ли вы объяснить мне, почему это так?
2. Ваш ввод содержит элементы в пространстве
http://www.ibm.com/maximo
имен, и, похоже, вы хотите добавить элемент в это пространство имен. Ваша попытка добавляет элемент в пространство имен no, чтоxmlns=""
приводит к результату in.3. Спасибо! Теперь я понимаю
Ответ №2:
Вы неправильно анализируете ситуацию:
Все элементы вашего исходного документа находятся в пространстве имен по умолчанию xmlns="http://www.ibm.com/maximo"
, и ваша таблица стилей копирует их как есть.
Ваш добавленный элемент is no-namespace — и xmlns=""
объявление указывает на это.