Мне нужно добавить дополнительное пространство имен в XML-файл с уже перенесенным пространством, но только если определенный элемент не существует.Добавить дополнительное пространство имен с XSLT
Мой XML документ выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<everyone xmlns="AAA" xmlns:ns2="BBB" xmlns:ns3="CCC" company="TestingCorp">
<common>Stuff Here</common>
<ns2:person id="123">
<ns3:firstname>Billy</ns3:firstname>
<ns2:lastname>Bobby</ns2:lastname>
</ns2:person>
</everyone>
... и если нет ns3: Firstname элемент в человеке элемент, я хотел бы добавить новое пространство имен и (например, Xmlns: лягушки = "FFF",), а также дополнительный элемент в человеке, как показано ниже:
Желаемый выход:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<everyone xmlns="AAA" xmlns:ns2="BBB" xmlns:ns3="CCC" xmlns:frog="FFF" company="TestingCorp">
<common>Stuff Here</common>
<ns2:person id="123">
<frog:title>
<Master/>
</frog:title>
<ns2:lastname>Bobby</ns2:lastname>
</ns2:person>
</everyone>
Мой XSL документ в настоящее время является:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Copy Everything -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:element name="ns:{local-name()}">
<xsl:attribute name="frog">fff</xsl:attribute>
<xsl:apply-templates select="node()|@*" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
.... к сожалению, это не работает.
Я пробовал много разных вещей, но не могу достичь этого, используя XSLT v1.0. Любая помощь будет принята с благодарностью.
Благодарим вас за быстрый ответ. Я еще не проверял это, но из-за очень ограниченного знания XSLT я не вижу, как это добавит только элемент frog: title, если элемент ns3: firstname отсутствует у человека. – user2119994
@ user2119994 трюк находится в 'match =" ns2: person [not (ns3: firstname)] "' - этот шаблон применяется только к элементам 'person', которые не имеют' firstname', те, которые имеют firstname будет использовать шаблон идентификации вместо этого. –
привет, Кроме того, есть ли способ достижения этого, указав только новое пространство имен, которое я хочу добавить в корневой элемент, и скопировать все существующие внутри, не указав также все остальные? – user2119994