0
我有下面的XML更改的屬性值,但只有當子元素滿足條件
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<cit>
<level type="higher">
<part>higher1</part>
<part>higher2</part>
</level>
<level type="medium">
<content>higher1 higher2</content>
</level>
</cit>
<cit>
<level type="higher">
<part>higherA</part>
</level>
<level type="medium">
<content>higherA</content>
</level>
</cit>
</entry>
我現在想的level
元素的屬性值從「中」變更爲「低」,但只如果content
孩子的內容由兩個或更多單詞組成。
我的XSL文件(XSLT 2.0)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="cit/level/@type[.='medium']">
<xsl:attribute name="{name()}">lower</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
改變屬性值ALL <level>
元素,無論他們有多少字包含的內容。我嘗試在模板匹配定義之後插入一個<xsl:if test ...>
,以便識別<level type="medium">
內容中的任何空格,但無濟於事。那麼,什麼纔是正確的做法呢?
完美!非常感謝!但是我仍然可以問一下標記大小表達式中的''[2]''完全代表什麼? – smo
這是一個位置謂詞,它選擇'tokenize'返回的序列中的第二個項目,如果有第二個項目,並且與外部謂詞('level [tokenize(content,'s +')[] 2]])它是檢查標記化至少返回兩個項目的簡短形式。 –
這可能與要求「包含兩個或更多單詞」的準確匹配,特別是如果存在前導空格或尾隨空格。我傾向於建議謂詞'[包含(normalize-space(),'')]'' –