說我有看起來像這樣的XML文件:如何使用默認命名空間編寫XSL?
<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns="http://My/Project.xsd">
<Thing Name="test"/>
</Project>
我的XSLT是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes" xmlns="http://My/Project.xsd">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:template match="Thing">
<xsl:value-of select="@Name"/>
</xsl:template>
</xsl:stylesheet>
輸出是[NewLine][Tab][NewLine]
該XML文件的間距相匹配。
如果我改變我的XSLT是:(加前綴)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes" xmlns:N="http://My/Project.xsd">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:template match="N:Thing">
<xsl:value-of select="@Name"/>
</xsl:template>
</xsl:stylesheet>
輸出爲[NewLine][Tab]test[NewLine]
這又符合XML文件的間隔,但包括「名稱」屬性的值。
我的預期產出只是test
。沒有新行,沒有標籤 - 它不應該遵循XML文件的格式。
我想在不使用前綴的情況下編寫XML和XSLT。我如何使這個輸出成爲我期待的?
要補充一點,你得到空白的原因是你的樣式表中有內置的模板規則處理你沒有明確匹配的節點。文本節點的默認規則 - 即使是隻有空白的文本節點 - 也是將其複製到輸出。除了xsl:strip-space之外,另一種防止這種情況的方法是添加規則'',這是一個空模板規則,這意味着當處理器擊中文本節點時, –
2011-04-01 08:26:26
Michael,非常好的評論!感謝您閱讀本書,btw :) – 2011-04-01 09:49:54
另一個補充:您可以在XSLT/XPath中用'* [local-name()='whatever']選擇元素而不考慮名稱空間1.0或XSLT/XPath 2.0中的'*:whatever' – 2011-04-01 16:08:52