我正在对XML文件进行Schematron验证,结果如下:
<fired-rule context="Message[@Name='SPY_IN']"/>
<failed-assert test="@OppositeMacAddress='0x00'" location="/Module[1]/Router[1]/Message[1]">
<text>!Error! Erwarteter Wert:"0x00"</text>
</failed-assert>
<fired-rule context="Configuration[@Address='W_ST_PLAMA_MOD_OWM_OPP']"/>
<failed-assert test="@Name='8'"
location="/Module[1]/DriverConfigurations[1]/DriverConfiguration[20]/Configuration[10]">
<text>!Error! Erwarteter Wert:"8"</text>
</failed-assert>
现在我正在尝试生成一个引用“location”属性的XML文件。 它应该是这样的:
<Module>
<Router>
<Message>
</Message>
</Router>
</Module>
<Module>
<DriverConfigurations>
<DriverConfiguration>
<Configuration>
</Configuration>
</DriverConfiguration>
</DriverConfigurations>
</Module>
我试着参考这个:auto creating xml elements using XSLT 但它在某种程度上对我不起作用。所以我不知道我的xsl文件应该是什么样的。 有什么想法吗?
答案 0 :(得分:1)
尝试一下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<root>
<xsl:apply-templates select="//failed-assert/@location" />
</root>
</xsl:template>
<xsl:template match="@location">
<xsl:param name="path" select="." />
<xsl:variable name="currentContext"
select="substring-before(substring-after($path,'/'), '[')"/>
<xsl:variable name="subContext" select="substring-after($path, ']')"/>
<xsl:element name="{$currentContext}">
<xsl:apply-templates select="current()[string($subContext)]">
<xsl:with-param name="path" select="$subContext"/>
</xsl:apply-templates>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
在此输入上运行时:
<root>
<fired-rule context="Message[@Name='SPY_IN']"/>
<failed-assert test="@OppositeMacAddress='0x00'" location="/Module[1]/Router[1]/Message[1]">
<text>!Error! Erwarteter Wert:"0x00"</text>
</failed-assert>
<fired-rule context="Configuration[@Address='W_ST_PLAMA_MOD_OWM_OPP']"/>
<failed-assert test="@Name='8'"
location="/Module[1]/DriverConfigurations[1]/DriverConfiguration[20]/Configuration[10]">
<text>!Error! Erwarteter Wert:"8"</text>
</failed-assert>
</root>
结果是:
<root>
<Module>
<Router>
<Message />
</Router>
</Module>
<Module>
<DriverConfigurations>
<DriverConfiguration>
<Configuration />
</DriverConfiguration>
</DriverConfigurations>
</Module>
</root>