Если вы храните файл свойств в формате XML, например
<Properties>
<Property value="abc">def</Property>
<Property value="...">...</Property>
</Properties>
тогда вы можете использовать xslt для обработки обоих XML-файлов и замены элементов abc на def, etcetera.
Например
<?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" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="props" select="document('Properties.xml')"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="Content/*">
<xsl:variable name="repl" select="$props/Properties/Property[@value=name(current())]"/>
<xsl:choose>
<xsl:when test="$repl">
<xsl:element name="{$repl}">
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Применительно к
<?xml version="1.0" encoding="UTF-8"?>
<Content>
<abc>xxx</abc>
<def>zzz</def>
<ghi>ccc</ghi>
</Content>
с файлом свойств
<?xml version="1.0" encoding="UTF-8"?>
<Properties>
<Property value="abc">def</Property>
<Property value="def">www</Property>
</Properties>
это приводит к
<?xml version="1.0" encoding="UTF-8"?>
<Content>
<def>xxx</def>
<www>zzz</www>
<ghi>ccc</ghi>
</Content>
ДОПОЛНЕНИЕ Дживаном
------------------------------------------------------------------------------------
My question is that if i want to access
'value' attribute(input xml file tags)
ex:
<Property value="abc">def</Property>
Я хочу, чтобы файл 'abc' был доступен из файла Properties.xml в другой переменной, скажем 'repl1', используя что-то вроде '$ props / Properties / ..' в select?
как это может быть достигнуто.
ОТВЕТ Maestro13
До сих пор неясно, что вы хотите сделать, поэтому я просто дам вам несколько советов, которые, надеюсь, будут полезны.
Атрибут value может быть доступен с помощью выражения Xpath, включая /@value
. Вы должны иметь текущий узел свойств, чтобы, конечно, иметь возможность этого. Это можно сделать, выполнив цикл следующим образом:
<xsl:for-each select="$props/Properties/Property">
<w><xsl:value-of select="@value"/></w>
</xsl:for-each>
, где текущий узел в цикле является зацикленным, а @value
действует на этот узел.
Или вы можете определить шаблон, делающий то же самое (шаблон, если он не назван и не вызван напрямую, будет вызываться повторно для всех совпадающих узлов).
Другой способ получить атрибут value - это сначала получить выражение Xpath, которое выбирает ровно один элемент Property, например, выбрав n-е вхождение следующим образом:
<xsl:value-of select="$props/Properties/Property[3]/@value"/>
В случае вышеупомянутого файла свойств, это возвратит ghi
.