我正在寫一個XSLT,它除了別的以外,還定位了具有以「_」開頭的值的「name」屬性的某些元素。 。 找到這樣的屬性後,xslt會創建一個xsl:屬性,該名稱是「name」屬性的短劃線之後的所有文本。設置一個屬性的名稱以匹配另一個元素的屬性的子字符串
所以,舉例來說,假設我有以下XML分段:
<someelement>
<json:string name="-style">display: block; white-space: pre; border: 2px
solid #c77; padding: 0 1em 0 1em; margin: 1em;
background-color: #fdd; color: black</json:string>
[... some extra elements here ...]
</someelement>
而且我希望它成爲
<someelement style="display: block; white-space: pre; border: 2px solid #c77;
padding: 0 1em 0 1em; margin: 1em; background-color: #fdd;
color: black">
[... some extra elements here ...]
</someelement>
Currenty,我想就以下幾個XSLT變化:
<!-- Match string|number|boolean|null elements with a "name" attribute -->
<xsl:template match="json:string[@name] | json:number[@name] | json:boolean[@name] | json:null[@name]">
<xsl:choose>
<xsl:when test="starts-with(@name,'-')">
<xsl:attribute name="{substring(./[@name],2,string-length(./@name) - 1)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{@name}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
,具體而言,這是困擾我行:
<xsl:attribute name="{substring(./[@name],2,string-length(./@name) - 1)}">
更具體地說,其中不工作的部分是字符串部分。如果我用一個數字替換整個字符串部分,比如說2,它就可以工作。
是的,我知道substring-after會讓我更好。 我曾嘗試以下,但它不工作之一:
<xsl:attribute name="{substring-after(./[@name],'-')}">
我敢肯定,這是某種形式的語法錯誤。
P.S. - 我正在使用XMLSPY進行測試。
非常感謝您的幫助。
您在不當使用方括號。 –