我有一個默認命名空間的輸入xml。例如如下。帶查找文件的XSL默認名稱空間
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="aaa">
<subroot>
<country>aaa</country>
<country>bbb</country>
<country>ccc</country>
</subroot>
</root>
轉換時使用xpath-default-namespace =「aaa」,否則xpaths將不匹配。我必須再次使用xsl key函數來讀取查找xml。例如如下
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xpath-default-namespace="aaa" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="LookupDoc" select="document('lookup.xml')" />
<xsl:key name="ObjectType-lookup" match="lookup" use="@att1" />
<xsl:template match="//country">
<countrynew>
<xsl:apply-templates select="$LookupDoc/*">
<xsl:with-param name="curr-code" select="string(.)" />
</xsl:apply-templates>
</countrynew>
</xsl:template>
<xsl:template match='lookups'>
<xsl:param name="curr-code" />
<xsl:value-of select="key('ObjectType-lookup' , normalize-space($curr-code))/@att2" />
</xsl:template>
在樣式表元素的XPath默認命名空間 「//國家」 工作正常。當我讀取沒有任何命名空間的lookup xml時,問題就出現了。例如:
<?xml version="1.0" encoding="UTF-8"?>
<x:lookups>
<lookup att1="aaa" att2="zzz"/>
<lookup att1="bbb" att2="yyy"/>
<lookup att1="ccc" att2="xxx"/>
</x:lookups>
有沒有我可以在模板MACHING「查找」指定忽略XPath的默認名稱空間或匹配,包括沒有任何namespce命名空間的任何方式?
謝謝
我不知道xpath-default-namespace在任何地方都可用。對於我的實際情況,我有許多xsl鍵功能。所以我所做的是將所有的關鍵函數移動到一個文檔中,並將xpath-default-namespace =「」放入樣式表元素中。所以我不需要在所有密鑰中都複製它。 感謝您的快速回復lan :) – 2013-02-13 12:35:33
@susithasenarath當然總是有一種老式的方式來忘記'xpath-default-namespace',而是將URI映射爲前綴並在XPath中使用它,即將'在xsl:stylesheet上使用xmlns:a =「aaa」',然後使用''。 –
2013-02-13 12:43:31
是的,我也考慮過。但是我的情況仍然不好看,因爲我已經完成了xsl,它有數百個xpath表達式。所以如果我必須在每一個上加上前綴,那麼這將是一場噩夢。 xpath-default-namespace給我一個簡單的解決方法就是引入這個問題。現在每件事情都很好。 :) – 2013-02-14 03:55:53