Я не совсем понимаю вопрос, но я думаю, что у меня есть идея, что вы имеете в виду. Возможно, это не то, что вам нужно. Вы упоминаете XPointer и XInclude, которые кажутся мне излишними.
Вот решение XSLT (1.0). Таблица стилей принимает файл XML, такой как тот, который вы задаете в вопросе, и пробки value
для ?????
. (Ваш XML, кстати, отсутствует элемент-оболочка, поэтому он технически искажен. Но я думаю, что понимаю, что вы имеете в виду. Я тихо добавлю в качестве элемента документа, и вот как работает таблица стилей. может потребоваться настроить его, чтобы соответствовать XML, вы на самом деле работаете с)
Вот таблица стили:.
<?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" indent="yes"/>
<xsl:template match="*">
<xsl:variable name="n" select="name (.)"/>
<xsl:element name="{$n}">
<xsl:for-each select="@*">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:apply-templates select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="text()">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="/">
<xsl:element name="areas">
<xsl:apply-templates select="areas"/>
</xsl:element>
</xsl:template>
<xsl:template match="areas">
<xsl:apply-templates select="area1"/>
<xsl:apply-templates select="area2"/>
</xsl:template>
<xsl:template match="text()[parent::setting[ancestor::area2]]">
<xsl:apply-templates select="preceding::area1/settings/setting/text()"/>
</xsl:template>
</xsl:stylesheet>
Стилевых по существу только копирует свой входной XML документ, за исключением одного пункта: когда речь идет о с setting
под area2
, он не копирует текст, а возвращается к узлу area1
и копирует текст под его setting
. Вы можете подтвердить, что это работает с использованием любого XSLT-процессора, например, xsltproc (похоже, что у вас есть некоторые нетривиальные функции XML в вашем распоряжении, поэтому это должно быть довольно просто). Просто внесите некоторые изменения в value
и запустите таблицу стилей в измененном XML-документе.
Очевидно, что вы не нашли времени, чтобы ознакомиться с этими технологиями XML. Что вам нужно, зависит от языка/среды, которую вы используете. Например, существуют решения для Python (например, lxml), Java, PHP; есть XQuery и XSLT. Как насчет просмотра учебника XSLT, прежде чем спрашивать здесь? –
К сожалению, у меня нет времени, чтобы ознакомиться со всеми технологиями XML, но я стараюсь делать это шаг за шагом, когда появляются новые потребности. У меня уже есть решение на моем языке (PHP), но мне не разрешено выполнять изменения на нем. Причиной этого я задавался вопросом, существует ли там чистое XML-решение без изменения внешней среды. (я также добавил пример XPointer к моему вопросу) – Kamafeather
Извинения, я немного неправильно понял ваш вопрос. Вы уверены, что XPointer и XLink поддерживаются вашим PHP-решением? –