我是新來的XML和XSLT,並花了一些時間在什麼應該是一個非常簡單的搜索和替換的情況。我似乎無法得到正確的語法。基本的XML/XSLT變換:搜索和替換
本練習的總體目標是分別用'true'或'false'替換元素'NewCustomer'中'Y'和'N'的值。
這是我的示例數據。
<?xml version="1.0"?>
<CustomerList>
<Customer>
<CustomerID>1111</CustomerID>
<CompanyName>Sean Chai</CompanyName>
<City>New York</City>
<NewCustomer>N</NewCustomer>
</Customer>
<Customer>
<CustomerID>1112</CustomerID>
<CompanyName>Tom Johnston</CompanyName>
<City>Los Angeles</City>
<NewCustomer>N</NewCustomer>
</Customer>
<Customer>
<CustomerID>1113</CustomerID>
<CompanyName>Institute of Art</CompanyName>
<City>Chicago</City>
<NewCustomer>Y</NewCustomer>
</Customer>
</CustomerList>
這是轉換樣式表。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Identity Template (applies to all nodes and will copy all nodes -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Customer">
<xsl:choose>
<xsl:when test="NewCustomer = 'Y'">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:when test="NewCustomer = 'N'">
<xsl:text>false</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
這是我的輸出。
<?xml version="1.0" encoding="utf-8" ?>
<CustomerList>false false true</CustomerList>
這是我希望它輸出。
<?xml version="1.0"?>
<CustomerList>
<Customer>
<CustomerID>1111</CustomerID>
<CompanyName>Sean Chai</CompanyName>
<City>New York</City>
<NewCustomer>false</NewCustomer>
</Customer>
<Customer>
<CustomerID>1112</CustomerID>
<CompanyName>Tom Johnston</CompanyName>
<City>Los Angeles</City>
<NewCustomer>false</NewCustomer>
</Customer>
<Customer>
<CustomerID>1113</CustomerID>
<CompanyName>Institute of Art</CompanyName>
<City>Chicago</City>
<NewCustomer>true</NewCustomer>
</Customer>
</CustomerList>
我在想什麼?爲什麼?我看到,如果我忽略檢查NewCustomer的子句,則會輸出整個輸出。但是,選擇爲NewCustomer輸出正確更改的值將僅顯示它們。是否有必須在第二個模板中引用之前的模板?
很好的解釋,+1。 – Tomalak 2009-10-01 10:51:08
+1用於有效回答問題的原因部分。 – GuruM 2012-10-12 12:57:28