我想用xsl轉換和過濾xml文件,但是我遇到了問題。如果我嘗試從節點獲取屬性的值,則變量var_value
也是一個節點。在我看來,這就是爲什麼我無法將var_value
與任何字符串進行比較的原因。我對嗎?從XML讀取屬性值
XML文件:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetListItemsResponse>
<GetListItemsResult>
<listitems xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<rs:data ItemCount="1">
<z:row ows_ID="1" ows_Status0="Active" ows_Priority="3" ows_Criticality="Critical" />
</rs:data>
</listitems>
</GetListItemsResult>
</GetListItemsResponse>
</soap:Body>
</soap:Envelope>
XSLT:
<xsl:variable name="ar_Fields">
<Field>ows_Status0</Field>
</xsl:variable>
<xsl:template match="/" name="TransformFields">
<xsl:param name="param_Attribute"/><xsl:variable name="var_EmptyDate" select="'1900-01-01 00:00:00'"/>
<xsl:for-each select="//*['z:row']/@*">
<xsl:variable name="var_Name" select="name()"></xsl:variable>
<xsl:variable name="var_Value"><xsl:value-of select="string(.)"></xsl:value-of></xsl:variable>
<xsl:for-each select="$ar_Fields">
<xsl:if test="not($var_EmptyDate=$var_Value) and ($var_Name=$ar_Fields/.)">
<xsl:call-template name="CreateElement">
<xsl:with-param name="param_Name" select="$var_Name"/>
<xsl:with-param name="param_Value" select="$var_Value"/>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<xsl:template name="CreateElement">
...
</xsl:template>
結果應該是這樣的:<Field Name="Status0">Active</Field>
你比較錯誤或爲什麼你說「不能比較var_value與任何字符串」?你得到哪個錯誤?什麼是'//'['z:row']'應該選擇?像''z:row''這樣的非空字符串在任何情況下都會使謂詞爲真。 –
不,我沒有收到錯誤,但是如果我嘗試將節點與定義的字符串進行比較,例如var_value是一個設置了內容的節點(Status0,Active),然後''返回false。 –
Michelle
您可以顯示您的完整預期輸出文檔嗎? –