我有一個輸入XML文件:XSLT 2.0的錯誤處理:拋出異常的JavaScript
<Items>
<Item Name="1" Value="Value1"></Item>
<Item Name="2" Value="Value2"></Item>
</Items>
我想轉換成在與撒克遜-CE輸出文件的內容。
<Items>
<Item Name="1" Value="NewValue1"></Item>
<Item Name="2" Value="NewValue2"></Item>
</Items>
JS:
function TransformXML() {
xsltData = Saxon.requestXML("transformXML.xsl");
xmlData = Saxon.requestXML("myxml.xml");
var xsltProcessor = Saxon.newXSLT20Processor(xsltData);
var result = xsltProcessor.transformToDocument(xmlData);
}
我有一個映射,告訴我它應該有改造後的項目,並設置爲newValue的價值。 我有什麼至今:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" name="xml" />
<xsl:variable name="Items">
<Item Name="1">
<Value OldValue="Value1" NewValue="NewValue1" ></Value>
</Item>
<Item Name="2">
<Value OldValue="Value2" NewValue="NewValue2" ></Value>
</Item>
</xsl:variable>
<xsl:template match="Items">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="Item">
<xsl:copy>
<xsl:if test="not($Items/Item[@Name=current()/@Name]/Value[@OldValue = current()/@Value])">
<!-- if value mismatch throw exception and stop -->
</xsl:if>
<xsl:attribute name="Value">
<xsl:value-of select="$Items/Item[@Name=current()/@Name]/Value[@OldValue = current()/@Value]/@NewValue"/>
</xsl:attribute>
<xsl:copy-of select="@*[name()!= 'Value']" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
這是工作,但我想現在要做的是檢查是否有值不匹配。 如果是,那麼腳本應該停止並拋出一個異常,我可以在Javascript函數中捕捉到。 有沒有辦法實現這一點?我可以爲此設置回調函數嗎?